/**
* Dart中的抽象类
* Dart抽象类主要用于定义标准, 子类可以继承抽象类, 也可以实现抽象类接口
* 1.抽象类通过abstract关键字来定义
* 2.Dart中的抽象类方法不能用abstract声明, Dart中没有方法体的方法我们成为抽象方法
* 3.如果子类继承抽象类必须得实现里面的抽象方法
* 4.如果吧抽象类当做接口实现,必须试下抽象类里面所有属性和方法
* 5.抽象类不能被实例化, 只有继承抽象类的子类可以
*
*
* extends抽象类和 implements区别:
* 1.如果要复用抽象类里面的方法,并且要用抽象方法约束子类就用extends继承抽象类
* 2.如果只是把抽象类当做标准就用implemets实现抽象类
*
*/
main(List<String> args) {
var dog = new Dog();
dog.name = "小狗";
dog.eat();
dog.run();
dog.say();
// 抽象类其实就是多态的一种形式
// 这里将dog转成Aniaml, 那么他就不能用dog类自己的say方法了
Animal dog1 = new Dog();
dog1.run();
// dog1.say()//这世就没有这个方法可以调用了
}
// 定义一个抽象类, 抽象类未实现的方法叫抽象方法,子类必须实现, 抽象类里面实现了的方法, 子类可以直接继承使用
abstract class Animal {
String name = "动物";
eat();
run() {
print("${this.name}奔跑吧");
}
}
class Dog extends Animal {
@override
eat() {
print("小狗吃骨头!");
}
// 子类自己的方法
say() {
print("汪汪汪!");
}
}
class Cat implements Animal {
@override
String name;
@override
eat() {
// TODO: implement eat
throw UnimplementedError();
}
@override
run() {
// TODO: implement run
throw UnimplementedError();
}
}