抽象类、多态、接口、mixins(Dart语言)

抽象类、多态、接口、mixins(Dart)

 

抽象类

抽象类主要用于定义标准,在抽象类中既可以定义抽象方法,也可以定义非抽象方法。继承抽象类的子类必需实现其中的所有抽象方法,同时也可以直接调用抽象类中的非抽象方法。

/*定义一个抽象类:动物*/
abstract class Animal{

    eat(); //定义抽象方法
    
    printInfo(){//定义普通方法
        print("Hello");
    }
}


/*定义一个普通类:猫,使用"extends"关键字继承Animal抽象类*/
class Cat extends Animal{
    
    eat(){ //实现抽象类中的抽象方法
        print("猫吃小鱼干");
    }

}

main(){

    Cat cat = new Cat();
    cat.eat(); //输出:猫吃小鱼干
    cat.printInfo(); //输出:Hello

}

需要注意的是:

  1. 抽象类不可以直接实例化。直接在 main函数中书写:var animal = new Animal(); 会报错。
  2. 在Dart中无法实现多继承,即:class A extends B,C{... } 的书写方式是错误的,但是Dart提供了mixins,可以实现类似多继承的方法。

 

多态

多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。按照这种定于,上面部分所使用到的抽象方法的代码就是一种多态。

还有一种官方的定义”允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果“

可以通过一下代码来理解:

/*定义一个抽象类:动物*/
abstract class Animal{

    eat(); //定义抽象方法
    
}


/*定义一个普通类:猫,使用"extends"关键字继承Animal抽象类*/
class Cat extends Animal{
    
    eat(){ //实现抽象类中的抽象方法
        print("猫吃小鱼干");
    }

    run(){//定义一个所继承的抽象类中没有方法
        print("小猫在跑");
    }

}

/*定义一个普通类:狗,使用"extends"关键字继承Animal抽象类*/
class Dog extends Animal{
    
    eat(){ //实现抽象类中的抽象方法
        print("狗子吃骨头");
    }

}

main(){

    //将子类类型的指针赋值给父类类型的指针
    Animal cat = new Cat();
    Animal dog = new Dog();
    //调用两个子类都分别实现的eat()函数,但是会有不同的执行结果
    cat.eat();//输出:小猫在跑
    dog.eat();//输出:狗子吃骨头

    //子类中自定义的方法不能在赋值给父类类型后在调用
    cat.run(); //Error

}

 

接口

在Dart语言中,普通类和抽象类均可以作为接口被实现。如果是普通类作为接口,就是将其中的类和方法都重写覆盖。

同时,Dart中的接口不需要使用 interface 关键字,相同的是需要使用 implements 来进行实现,可以同时implements多个接口。

所以建议:在Dart中使用抽象类来定义接口

 

mixins(Dart 2.x版本)

  1. 使用关键字  with
  2. 只能继承Object类,不能继承其它类。(不能继承那些继承了其它类的类)
  3. mixins类不能有构造函数。
  4. mixins绝不是继承,也不是接口,而是一种全新的特性。
class Mother{ //作为mixins类
    void motherInfo(){
        print("大眼睛");
    }
}

class Father{ //作为mixins类
    void fatherInfo(){
        print("高个子");
    }
}

class Me with Mother,Father{//将Mother类和Father类作为mixins类
    
}


void main(){
    
    var me = new Me();
    me.motherInfo(); //输出:大眼睛
    me.fatherInfo(); //输出:高个子

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值