Dart中抽象类和接口的一点总结
抽象类和接口
Dart也是一门面向对象的语言,关于Dart的历史,这里不再详细叙述,作为google内部孵化的语言,如今已成为Flutter框架的指定官方语言。个人看来,所有面向对象的语言,都抛不开抽象类和接口,这是面向对象语言所具有的通性。
Dart中的抽象类和接口:
定义上:
Dart中定义抽象类,也是采用abstract关键字,只要类里有抽象方法,该类就得使用抽象的关键字,Dart中的抽象方法,不用abstract关键字形容。这个是区别于java的,java中抽象类里的抽象方法必须用abstract关键字修饰。
//Dart中的抽象类
abstract class Person{
getName();
getAge();//并不需要abstract关键字修饰
}
//java 中的抽象类
public abstract class Show {
void showSomething() {
}
abstract void eat();//注意这个方法 是有abstract 关键字修饰的
}
使用上:
Dart中子类使用抽象类,可以用关键字 extends来继承,这里子类要实现抽象类里的抽象方法。Dart中的抽象类也不可以实例化,可以实例化它的子类。
注意点:
Dart中并没有interface一说,java中所谓的接口在Dart中的表现仍是抽象类,抽象类可以被继承,也可以被实现,继承的话,子类需要实现父类中的抽象方法,实现的话,这里是有区别的,子类必须得实现抽象类的属性和方法
abstract class Animal{
int a=2;
void eat(){
}
void drink(){
}
void say();
}
class Dog implements Animal{
@override
int a;
@override
void drink() {
// TODO: implement drink
}
@override
void eat() {
// TODO: implement eat
}
@override
void say() {
// TODO: implement say
}
}
Dart中的with
这里个人认为这是Dart中为了实现类似C++那种的多继承机制而引进的关键字。
如果子类要同时使用 extends with implements,这里的顺序是这样的 先extends 然后再with 最后implements
abstract class Animal {
int a = 2;
void eat() {}
void drink() {}
void say();
}
class Show {}
abstract class Fly {}
class Bird extends Animal with Show implements Fly {
@override
void say() {
// TODO: implement say
}
}