Từ khóa super được sử dụng để biểu thị đối tượng lớp cha tức thời của lớp con hiện tại. Nó được sử dụng để gọi các phương thức của lớp cha, phương thức khởi tạo của lớp cha trong lớp con của nó. Mục tiêu chính của từ khóa super là loại bỏ sự nhầm lẫn giữa lớp cha và lớp con có cùng tên phương thức. Nó cũng được dùng để chỉ các thuộc tính và phương thức của lớp cha.
Các bài viết liên quan:
Sử dụng từ khóa tĩnh
- Khi lớp cha và lớp con có các thành viên trùng tên, thì từ khóa super có thể được truy cập dữ liệu các thành viên của lớp cha trong lớp con.
- Nó được sử dụng để truy cập phương thức khởi tạo của lớp cha trong lớp con.
- Sử dụng từ khóa super, chúng ta có thể truy cập phương thức superclass bị subclass ghi đè.
Sử dụng từ khóa super có các biến
Tình huống này phát sinh khi lớp con có các biến trùng tên với các biến lớp cha. Vì vậy, có một cơ hội mơ hồ cho trình biên dịch Dart . Sau đó, từ khóa super có thể truy cập các biến lớp cha trong lớp con của nó. Cú pháp được đưa ra dưới đây.
Cú pháp:
- Super.varName
Chúng ta có thể hiểu rõ hơn bằng ví dụ sau.
Ví dụ:
// Super class Car class Car { int speed = 180; } // sub class Bike extending Car class Bike extends Car { int speed = 110; void display() { //print varible of the base class (Bike) print("The speed of car: ${super.speed}"); } } void main() { // Creating object of sub class Bike b = new Bike(); b.display(); }
Giải trình:
Trong đoạn mã trên, chúng tôi đã định nghĩa lớp cha là Car, có một biến tốc độ và sau đó nó được kế thừa bởi lớp con Bike.
Lớp con cũng có tốc độ thay đổi, vì vậy chúng tôi đã sử dụng từ khóa super để truy cập biến lớp cha. Chúng ta đã tạo đối tượng của lớp con b và gọi một phương thức hiển thị in ra giá trị của biến lớp cha.
Nếu chúng ta sử dụng print (speed) thay vì print (super.speed), nó sẽ in ra giá trị của biến lớp con.
Bạn có thể sao chép mã trên, dán vào dartpad hoặc notepad và in giá trị mà không cần sử dụng từ khóa super. Bạn có thể thấy sự khác biệt giữa cả hai kết quả.
Sử dụng từ khóa super với phương thức lớp cha
Như đã thảo luận trước đó, từ khóa super được sử dụng để truy cập vào phương thức của lớp cha trong lớp con. Nếu lớp con và lớp cha có cùng tên, thì chúng ta có thể sử dụng từ khóa super để sử dụng phương thức lớp cha trong lớp con. Cú pháp được đưa ra dưới đây.
Cú pháp:
super.methodName;
Hãy hiểu ví dụ sau
Ví dụ:
// Base class Super class Super { void display() { print("This is the super class method"); } } // Child class inherits Super class Child extends Super { void display() { print("This is the child class"); } // Note that message() is only in Student class void message() { // will invoke or call current class display() method display(); // will invoke or call parent class displa() method super.display(); } } void main() { // Creating object of sub class Child c = new Child(); // calling display() of Student c.message(); }
Giải trình:
Trong đoạn mã trên, chúng ta đã tạo hàm có cùng tên trong cả lớp cha và lớp con. Phương thức display () hiện diện trong cả lớp cha và lớp con, điều đó có nghĩa là Đây là một tình huống ghi đè phương thức.
Vì vậy, chúng tôi đã tạo một phương thức message () trong lớp con, bên trong nó, chúng tôi gọi phương thức lớp cha bằng cách sử dụng từ khóa super, và sau đó tạo đối tượng của lớp con. Sử dụng đối tượng, chúng tôi đã gọi phương thức message () in cả hai câu lệnh phương thức display () ra màn hình.
Lưu ý – Siêu lớp chỉ có thể được sử dụng nếu phương thức lớp con ghi đè phương thức lớp cha. Nếu không thì chúng tôi không yêu cầu sử dụng từ khóa super.
Sử dụng từ khóa super với hàm khởi tạo
Chúng ta cũng có thể sử dụng từ khóa super để truy cập hàm tạo của lớp cha. Từ khóa super có thể gọi cả hàm tạo tham số và không tham số tùy thuộc vào tình huống. Cú pháp được đưa ra dưới đây.
Cú pháp:
- :super();
Hãy hiểu ví dụ sau.
Ví dụ:
// Base class called Parent class Parent { Parent() { print("This is the super class constructor"); } } // Child class Super class Child extends Parent { Child():super() // Calling super class constructor { print("This is the sub class constructor"); } } void main() { // Creating object of sub class Child c = new Child(); }
Giải trình
Cú pháp của ngôn ngữ Dart quá gần với ngôn ngữ C # . Chúng tôi đã gọi hàm tạo lớp cha bằng cách sử dụng từ khóa super, được phân tách bằng: (dấu hai chấm). Ủy nhiệm một phương thức khởi tạo lớp cha, chúng ta nên đặt lớp cha làm bộ khởi tạo.