[Dart] Từ khoá super
Trong Dart, từ khóa super
được sử dụng để tham chiếu đến lớp cha (superclass) của một lớp con (subclass). Nó cho phép bạn:
- Gọi constructor của lớp cha.
- Gọi các phương thức hoặc thuộc tính của lớp cha đã bị lớp con ghi đè (override).
1. Gọi constructor của lớp cha
Khi lớp con kế thừa từ lớp cha, bạn có thể sử dụng super
để gọi constructor của lớp cha nhằm khởi tạo các thuộc tính hoặc thực hiện logic ban đầu.
class Animal {
String name;
// Constructor của lớp cha
Animal(this.name);
}
class Dog extends Animal {
String breed;
// Constructor của lớp con gọi constructor lớp cha bằng super
Dog(String name, this.breed) : super(name);
void display() {
print('Name: $name, Breed: $breed');
}
}
void main() {
Dog dog = Dog('Buddy', 'Golden Retriever');
dog.display(); // Output: Name: Buddy, Breed: Golden Retriever
}
DartGiải thích:
- Constructor của
Dog
nhận tham sốname
vàbreed
. super(name)
gọi constructor của lớpAnimal
để khởi tạo thuộc tínhname
.
2. Gọi phương thức hoặc thuộc tính của lớp cha
Khi lớp con ghi đè (override) một phương thức hoặc thuộc tính của lớp cha, bạn vẫn có thể gọi phiên bản của lớp cha bằng cách sử dụng super
.
Ví dụ:
class Animal {
void sound() {
print('Animal makes a sound');
}
}
class Dog extends Animal {
@override
void sound() {
super.sound(); // Gọi phương thức của lớp cha
print('Dog barks');
}
}
void main() {
Dog dog = Dog();
dog.sound();
// Output:
// Animal makes a sound
// Dog barks
}
DartGiải thích:
- Lớp
Dog
ghi đè phương thứcsound()
của lớpAnimal
. - Trong phương thức
sound()
củaDog
,super.sound()
gọi phiên bản của lớp cha trước khi thực thi logic bổ sung.
3. Khi nào nên dùng super
?
- Khi cần khởi tạo các thuộc tính trong lớp cha từ constructor lớp con.
- Khi muốn kế thừa nhưng vẫn giữ lại logic của lớp cha, bằng cách sử dụng phương thức hoặc thuộc tính của lớp cha.