mixin 混入类
语法格式 mixin MixinClassName {}
混入类 是一种代码复用机制 可以将混入类的方法和属性中 插入被混入的类中 从而实现代码的复用和组合。
由于没有构造方法所以不可以实例化
可以使用with关键字 将以一个或者多个混入类合并到一个类中
如果混入类中 有抽象方法 则 被混入类必须要实现这个抽象方法
代码示例
// 如果需要混入多个 混入类时 格式:class ClassName with MyMixin1,MyMixin2 {}
class MyClass with MyMixin {
@override
void absMethod() {
print("抽象方法的实现");
}
}
mixin MyMixin {
void absMethod(); // 抽象方法 没有方法体{} 被混入类必须实现
void mixinMethod() {} //混入方法 有方法体
}
abstract 抽象类
语法格式 abstract class AbstractClassName{}
抽象类不能被实例化,只能被继承,用于定义类的接口或基本结构。
抽象方法是没有方法体的方法 也就是没有 {} 所以不能直接使用 只能通过继承抽象类 并实现其中的抽象方法后才能使用
abstract class MyAbstract {
void absMethod(); // 抽象方法 没有方法体{} 被继承类 必须实现这个方法。
}
extends 继承
单继承 即 extends 后只能跟一个类
子父类关系
父类可以是普通类 也可以是 抽象类
子类可以是普通类 也可以是抽象类 子类不为抽象类 对于抽象方法 子类必须要进行实现 否则编译期间就会进行报错 如果子类为抽象类的时候 对于抽象方法 子类可以重写也可以不实现
重写和重载
方法重写 指在子类重新实现继承自父类的方法 从而改写该方法原有的行为 在dart中重写的方法必须加上@override注解
被重写的方法 可以是抽象方法 也可以是非抽象方法
代码示例
abstract class Animal {
void makeSound(); // 抽象方法,需要实现
void sleep() {
print("Animal sleeps");
}
}
class Dog extends Animal {
// 实现
@override
void makeSound() {
print("Dog barks");
}
// 重写
@override
void sleep() {
print("Dog sleeps");
}
}
void main() {
Dog myDog = Dog();
myDog.makeSound(); // 输出: Dog barks
myDog.sleep(); // 输出: Dog sleeps
}