//Dart中的抽象类:
// 子类可以继承抽象类,也可以实现抽象类接口
// 抽象类通过abstract关键字来定义
// Dart 中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法
// 如果子类继承抽象类,必须实现抽象类里面的方法
// 如果把抽象类当做接口实现的话必须抽象类中定义的所有属性和方法
// 抽象类不能实例化,只有继承它的子类可以
//抽象类
abstract class Animal {
eatFood(); //抽象方法,没有方法体
//也可以有普通方法
printAnimal(){
print("我是抽象类中的一个普通方法");
}
}
class Dog extends Animal {
//必须实现抽象方法
@override
eatFood() {
print("小狗吃骨头");
}
}
class Cat extends Animal{
@override
eatFood() {
print("小猫吃鱼");
}
}
void main() {
Dog dog = new Dog();
dog.eatFood();
dog.printAnimal();
Cat cat = new Cat();
cat.eatFood();
cat.printAnimal();
//抽象类没法直接实例化
//多态:父类定义一个抽象方法,子类实现父类抽象方法,使得子类有不同的表现形式就叫多态
Animal a = new Dog();
a.eatFood();
Animal c = new Cat();
c.eatFood();
//Dart中的接口
}
abstract class DB{
String url;
add();
delete();
}
//要实现接口中的所有属性和方法
class MySql implements DB{
@override
add() {
// TODO: implement add
return null;
}
@override
delete() {
// TODO: implement delete
return null;
}
@override
String url;
}
class MongoDB implements DB{
@override
String url;
@override
add() {
// TODO: implement add
return null;
}
@override
delete() {
// TODO: implement delete
return null;
}
}
输出结果:
[Running] dart "/Users/zhoujian/DartDemo/abstractdemo.dart"
小狗吃骨头
我是抽象类中的一个普通方法
小猫吃鱼
我是抽象类中的一个普通方法
小狗吃骨头
小猫吃鱼
[Done] exited with code=0 in 1.138 seconds