抽象类、接口

1、抽象类通过abstract关键字来定义

2、 dart中的抽象方法不能用abstract声明,dart中没有方法体的方法称为抽象方法

3、如果子类继承抽象类必须得实现里面的抽象方法

abstract class Animal{
    eat(); //抽象方法
}
class Dog extends Animal{
    eat(){
        print('小狗在吃骨头');
    }
}
class Cat extends Animal{
    eat(){
        print('小猫在吃鱼');
    }
}
main(){
    Dog d = new Dog();
    d.eat();  //小狗再吃骨头
    Cat d = new Cat ();
    d.eat();  //小猫在吃鱼
Animal a = new Animal(); //报错因为抽象类不能被实例化
}

4、 多态

  允许子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果(通俗的说多态就是父类定义了一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现

abstract class Animal{
    eat(); //抽象方法
}
class Dog extends Animal{
    eat(){
        print('小狗在吃骨头');
    }
}
class Cat extends Animal{
    eat(){
        print('小猫在吃鱼');
    }
}
main(){
    Dog d = new Dog();
    d.eat();  //小狗再吃骨头
    Cat d = new Cat ();
    d.eat();  //小猫在吃鱼
    Animal a = new Animal();  //报错因为抽象类不能被实例化
}

//以上已经算是实现多态了,但是我们也可如下形式实现
abstract class Animal{
    eat(); //抽象方法
}
class Dog extends Animal{
    eat(){
        print('小狗在吃骨头');
    }
    sayhi(){
           print('say byby')
    }
}
class Cat extends Animal{
    eat(){
        print('小猫在吃鱼');
    }
     sayhi(){
           print('say byby')
    }
}
main(){
    //子类中只能实现父类定义的方法
    Animal d = new Dog(); //表示把子类的实例赋值给父类
    d.eat();

}

 

4、如果把抽象类当做接口实现的话、必须得实现抽象类里面定义的所有属性和方法

5、抽象类不能被实例化,只有继承它的子类可以

6、 建议使用抽象类定义接口,抽象类中可以有公共方法,如果这个抽象类只是定义标准没有公共方法这是就可以把这个抽象类当做一个接口

abstract class Db{
    String url;
    add(data);
    save();
}
class Mysql implements Db{
    @override url;
    @override
    add(data){
        print('''data:'+data);
    }
    @override
    save(){
        return null;
    }
}
main(){}
    Mysql mysql = new Mysql('xxxxx');
    mysql.add('1111');

如果子类要复用抽象类里边的方法,并且要用抽象方法约束子类的话就用extends继承抽象类

如果只是把抽象类当做标准的话我们就用implement实现抽象类。

posted @ 2019-09-01 19:21  番茄西红柿u  阅读(190)  评论(0)    收藏  举报