抽象类
Dart中的抽象类:Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
- 抽象类通过abstract 关键字来定义
- Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法,我们称为抽象方法。
- 如果子类继承抽象类必须得实现里面的抽象方法。
- 如果把抽象类当作接口实现的话必须得实现抽象类里面定义的所有属性和方法。
- 抽象类不能被实例化,只有继承它的子类可以
extends抽象类 和 implements 的区别:
- 如果要复用抽象类里面的方法,并且要用抽象方法约束自类的话我们就用extends继承抽象类。
- 如果只是把抽象类当作标准的话我们就用implements实现抽象类
案例:定义一个Animal 类,要求它的子类必须继承eat方法
步骤:
1、将Animal改为抽象类
2、加上 abstract 关键词
3、eat(); //抽象方法 ---- Dart中没有方法体的方法,我们称为抽象方法。
4、定义Dog类,继承Animal -- 实现 eat() 抽象方法 -- 约束子类!
abstract class Animal {
eat(); //抽象方法
run(); //抽象方法
printInfo(){
print("我是抽象类里面的普通方法");
}
}
// 定义Dog类,继承Animal
class Dog extends Animal{
@override
eat() {
// TODO: implement eat
print("小狗在吃骨头!");
}
@override
run() {
// TODO: implement run
print("小狗在跑!");
}
}
class Cat extends Animal{
@override
eat() {
// TODO: implement eat
print("小猫在吃鱼!");
}
@override
run() {
// TODO: implement run
print("猫猫在跑!");
}
}
void main(){
Dog dog = new Dog();
Cat cat = new Cat();
// print(dog.eat());
dog.eat();
dog.run();
cat.eat();
cat.run();
dog.printInfo();
cat.printInfo();
}
小狗在吃骨头!
小狗在跑!
小猫在吃鱼!
猫猫在跑!
我是抽象类里面的普通方法
我是抽象类里面的普通方法
多态
Dart中的多态:
- 允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果。
- 子类的实例赋值给父类的引用。
- 多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。
上面的Animal案例就是一个多态;还有另一种展现方式:
abstract class Animal {
eat(); //抽象方法
}
// 定义Dog类,继承Animal
class Dog extends Animal{
@override
eat() {
// TODO: implement eat
print("小狗在吃骨头!");
}
run(){
print("run");
}
}
class Cat extends Animal{
@override
eat() {
// TODO: implement eat
print("小猫在吃鱼!");
}
run(){
print("runs");
}
}
void main(){
/* 子级的实例赋值给了父级引用,无法调用子级中自定义的run()方法,只能调用父类中提供的标准,在子类实现方法。*/
Animal d = new Dog();
d.eat();
Animal c = new Cat();
c.eat();
}
小狗在吃骨头!
小猫在吃鱼!
网友评论