抽象类
主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口
抽象方法不能用abstract,没有方法体的方法就是抽象方法
如果子类继承抽象类,必须实现里面的抽象方法
如果把抽象类当做接口实现,必须实现里面的所有属性和方法
抽象类不能被实例化,只有继承他的子类可以
Extends和implements的区别
如果要复用抽象类里的方法,并且要用抽象方法约束子类的话就用
extends
如果只是把抽象类当做标准,就用implements
继承必须实现抽象方法
```dart
abstract class Animal{
eat();//抽象方法
walk(){}//带{}的是普通方法
}
class Dog extends Animal{
@override
eat() {
print("hello,dog");
}
多态
允许将子类型的指针赋值给父类型的指针
同一个函数调用会有不同结果
多态就是父类定义一个方法不去实现,让继承的子类去实现,
每个子类有不同表现
比如eat()
Animal c=new Dog(); //子类型指针赋值给父类型
c.eat();
接口–定义公用方法
没有interface关键字,普通类和抽象类都可以作为接口
用implements实现
但因为普通类不可以定义抽象方法,所以接口一般用抽象类
必须实现里面的所有属性和方法
abstract class Db{//当做接口
String uri="";
add(String data);
save();
delete();
}
class MySql implements Db{
@override
add(String data) {
print("add success,$data");
}
@override
delete() {
}
@override
save() {
}
@override
String uri;
MySql(this.uri);
}
main(){
MySql mySql=new MySql("hello,url");
mySql.add("hhh");
}
实现多个接口
class C implements A,B{}
Mixins
在类中混入其他功能
要求一致在变
1)继承自object
2)不能有构造函数
3)一个类可以mixins多个mixins类
4)mixins不是继承,也不是接口
class Animal{
String name="";
int age=0;
Animal(String name,int age);
printInfo(){
print("我是animal");
}
void run(){
print("animal在飞翔");
}
}
class A{
void printA(){
print("A");
}
void run(){
print("a在跑步");
}
}
class B{
void printB(){
print("B");
}
void run(){
print("b在游泳");
}
}
class C extends Animal with A,B {
//mixin A ,B 必须是顶级类,不能是其他类
//A,B不能有构造函数
C(super.name, super.age);//因为继承了animal有参构造
}
void main(List<String> args) {
C c=new C("李白",99);
c.printInfo();
c.printA();
c.printB();
c.run();//取决于extends with后面的顺序,使用后者 // b在游泳
print(c is A); //true 相当于A B animal都是c的超类
print(c is B ); //true
print(c is Animal );//true
}
945

被折叠的 条评论
为什么被折叠?



