编程语言
320
抽象类
使用 abstract 修饰符定义一个“抽象”类——一个不能被实例化的类。抽象类在定义接口时是有用的,通常附带一些实现。如果你想让你的抽象类变成可实例化的,定义一个 工厂构造函数。
抽象类经常包含 抽象方法。下面是一个定义抽象类的例子,它包含一个抽象方法:
// 该类定义为抽象的,因此无法被实例化 abstract class AbstractContainer { // 定义构造函数、属性、方法... void updateChildren(); // 抽象方法 }
隐式接口
每一个类都隐式地定义了一个包括它所有实例成员和它实现的任意接口的接口。如果你希望创建一个类 A 来支持类 B 的 API 但是又不继承 B 的实现,类 A 应该实现 B 接口。
一个类要实现一个或多个接口,在 implements 子句中定义它们然后提供这些接口需要的 API 的实现。比如:
// Person 类。隐式接口包含 greet() class Person { // 在接口中,但是只在这个库中可见 final _name; // 不在接口中,因为这是一个构造函数 Person(this._name); // 在接口中 String greet(String who) => 'Hello, $who. I am $_name.'; } // 一个 Person 接口的实现 class Impostor implements Person { get _name => ''; String greet(String who) => 'Hi $who. Do you know who I am?'; } String greetBob(Person person) => person.greet('Bob'); void main() { print(greetBob(Person('Kathy'))); print(greetBob(Impostor())); }
下面是一个类实现多个接口的例子:
class Point implements Comparable, Location {...}
继承类
使用 extends 来创建一个子类,使用 super 来引用父类:
class Television { void turnOn() { _illuminateDisplay(); _activateIrSensor(); } // ··· } class SmartTelevision extends Television { void turnOn() { super.turnOn(); _bootNetworkInterface(); _initializeMemory(); _upgradeApps(); } // ··· }