Модификатор base
Модификатор base применяется к объявлению класса
и запрещает его наследование за пределами текущей
библиотеки. Это означает, что класс с модификатором
base может быть расширен только внутри той же
библиотеки, где он объявлен. За её пределами класс
можно использовать, создавать его экземпляры, но нельзя
от него наследоваться. Модификатор base не
принимает параметров.
Класс, помеченный как base, обязан быть либо
base, либо final. Это правило
гарантирует, что цепочка наследования не выйдет за
пределы библиотеки.
Синтаксис
base class MyClass
{
// тело класса
}
Пример
Давайте объявим класс Animal с модификатором
base и расширим его внутри той же библиотеки:
base class Animal
{
void say()
{
print('animal');
}
}
class Dog extends Animal
{
void bark()
{
print('woof');
}
}
void main()
{
Dog dog = Dog();
dog.say();
dog.bark();
}
Результат выполнения кода:
"animal"
"woof"
Пример
Давайте объявим класс Shape с модификатором
base и попробуем расширить его в другой
библиотеке. Такой код не скомпилируется:
// library_a.dart
base class Shape
{
void draw()
{
print('shape');
}
}
// library_b.dart
import 'library_a.dart';
// ошибка: класс Shape нельзя наследовать
// за пределами его библиотеки
class Circle extends Shape
{
void round()
{
print('circle');
}
}
Компилятор выдаст ошибку, так как класс Shape
помечен модификатором base и не может быть
расширен за пределами своей библиотеки.
Пример
Давайте используем класс base из другой
библиотеки без наследования, просто создав его
экземпляр:
Результат выполнения кода:
"shape"