# 抽象 abstract
abstract 关键字用于定义抽象类和抽象成员(方法、属性、运算符等)。
抽象类是不能被实例化的类,它通常用作基类,为派生类提供模板。抽象类可以包含抽象成员,也可以包含具体实现的成员。
# 定义
普通类前加 abstract 就是抽象类
abstract class Person {
String name = 'Young Yang';
void printName() {
print(name);
}
}
1
2
3
4
5
6
2
3
4
5
6
# 不能直接 new 实例化
var p = Person();
p.printName();
Abstract classes can't be instantiated.
Try creating an instance of a concrete subtype.
1
2
3
4
5
2
3
4
5
# 继承方式使用
定义
class Father extends Person {
}
class Student extends Person {
void printName(){
print('Student: $name');
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
实例
var F = Father();
F.printName();
var S = Student();
S.printName();
Young Yang
Student: Young Yang
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 接口方式使用
定义
class Teacher implements Person {
String name;
Teacher(this.name);
void printName() {
print('Teacher: $name');
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
实例
var T = Teacher("Yang Yang");
T.printName();
Teacher: Yang Yang
1
2
3
4
2
3
4
# 继承和接口的区别
- 如果要复用抽象类里面的方法,并且要用抽象方法约束子类的话,就用extends继承抽象类。
- 如果只是把抽象类当做标准的话,就用implements实现抽象类。