Наследование — это фундаментальная концепция объектно-ориентированного программирования, которая позволяет классам наследовать свойства и поведение других классов. Dart, современный язык программирования, обеспечивает надежную поддержку наследования, позволяя разработчикам создавать эффективный и многократно используемый код. В этой статье мы рассмотрим наследование в Dart, рассмотрим различные методы и приемы на примерах кода.
- Единственное наследование:
Dart поддерживает одиночное наследование, то есть класс может наследовать только от одного суперкласса. Чтобы установить связь родитель-потомок, используйте ключевое словоextends. Дочерний класс наследует все незакрытые члены (т. е. поля и методы) от суперкласса.
class Animal {
void eat() {
print('Animal is eating.');
}
}
class Dog extends Animal {
void bark() {
print('Dog is barking.');
}
}
void main() {
var dog = Dog();
dog.eat(); // Inherited from Animal class
dog.bark(); // Defined in Dog class
}
- Переопределение метода:
В Dart вы можете переопределять унаследованные методы в дочернем классе. Это позволяет вам предоставить другую реализацию метода, определенного в суперклассе. Чтобы переопределить метод, используйте аннотацию@override.
class Animal {
void makeSound() {
print('Animal is making a sound.');
}
}
class Cat extends Animal {
@override
void makeSound() {
print('Cat is meowing.');
}
}
void main() {
var cat = Cat();
cat.makeSound(); // Overrides the makeSound() method in Animal class
}
- Доступ к членам суперкласса.
Ключевое словоsuperв Dart позволяет получить доступ к членам (полям и методам) суперкласса из подкласса. Вы можете использовать его для вызова конструкторов, методов суперкласса или доступа к полям суперкласса.
class Animal {
String name;
Animal(this.name);
void eat() {
print('$name is eating.');
}
}
class Dog extends Animal {
Dog(String name) : super(name);
@override
void eat() {
super.eat(); // Invokes eat() method from Animal class
print('...and wagging its tail.');
}
}
void main() {
var dog = Dog('Buddy');
dog.eat(); // Invokes overridden eat() method in Dog class but also accesses the superclass method using super
}
- Абстрактные классы:
Dart также поддерживает абстрактные классы, экземпляры которых невозможно создать напрямую. Абстрактные классы служат основой для других классов и могут иметь как абстрактные, так и конкретные методы. Абстрактные методы объявляются без тела и должны быть реализованы любым неабстрактным подклассом.
abstract class Animal {
String name;
Animal(this.name);
void makeSound();
}
class Dog extends Animal {
Dog(String name) : super(name);
@override
void makeSound() {
print('Dog is barking.');
}
}
void main() {
var dog = Dog('Buddy');
dog.makeSound(); // Implements the abstract method makeSound() from Animal class
}
Наследование — это мощная функция Dart, которая позволяет повторно использовать код и продвигает концепцию иерархии в объектно-ориентированном программировании. Понимая и эффективно используя наследование, разработчики могут писать более чистый, удобный в сопровождении и расширяемый код. В этой статье мы рассмотрели различные методы наследования в Dart, включая одиночное наследование, переопределение методов, доступ к членам суперкласса и абстрактные классы.