}
abstract class Student extends Person {
Student(String name) : super(name);
int age;
study() {
print(“学习”);
}
hasClass();
}
class Child implements Student {
@override
int age;
@override
hasClass() {
// TODO: implement hasClass
throw UnimplementedError();
}
@override
// TODO: implement name
String get name => throw UnimplementedError();
@override
run() {
// TODO: implement run
throw UnimplementedError();
}
@override
study() {
// TODO: implement study
throw UnimplementedError();
}
@override
talk() {
// TODO: implement talk
throw UnimplementedError();
}
}
总结:abstract class被abstract class继承,继承需要实现父类构造函数。
[](()2.3、abstract class 被Class extends和implements的区别
abstract class Person {
Person(this.name);
final String name;
talk();
run() {
print(“奔跑”);
}
}
class Man extends Person {
Man(String name) : super(name);
@override
talk() {
print(“man talk”);
}
}
class Woman implements Person {
@override
String get name => “女神”;
@override
run() {
print(“女神跑步”);
}
@override
talk() {
print(“女神说话”);
}
}
上面例子,Man 类继承Person 抽象类,Woman 类实现Person抽象类,可以看出区别如下:
-
《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 extends 自动生成abstract 的构造方法,implements则不会
-
extends 不需要实现属性可以直接利用父类, implements需要实现。
-
extends 不需要实现默认方法可以直接利用,implements需要实现。(重要)
-
接口定义方法 extends和implements都需要实现。
[](()3. class
Dart的Class特点: 可以当做抽象接口类被实现
代码例子:
class Person {
final String name;
Person(this.name);
talk() {
print(“person talk”);
}
run() {
print(“person run”);
}
}
class Woman implements Person {
@override
// TODO: implement name
String get name => throw UnimplementedError();
@override
run() {
// TODO: implement run
throw UnimplementedError();
}
@override
talk() {
// TODO: implement talk
throw UnimplementedError();
}
}
[](()4. mixin
通过创建一个继承自 Object 且没有构造函数的类,来 实现 一个 Mixin 。 如果 Mixin 不希望作为常规类被使用,使用关键字 mixin 替换 class 。
-
mixin 没有构造函数,不能被实例化
-
可以当做接口使用,class 混入之后需要实现
-
默认方法不需要实现(这个是和abstract 的区别)
-
如果一个类with,方法相同,先执行本体方法,然后按照混入顺序,执行最后mixin方法。
-
可以使用on 指定混入的类类型,如果不是报错。
代码演示:
main(List args) {
final man = Man(“男神”);
man.classes();
man.study();
}
class Person {
final String name;
Person(this.name);
talk() {
print(“person talk”);
}
run() {
print(“person run”);
}
}
class Man extends Person with Student {
Man(String name) : super(name);
@override
study() {
print(“man study”);
}