Dart之Mixin详解

随着Dart学习的深入,发现了一个比较棘手的语法——mixin。它对于Java开发人员来说,是一个全新的概念,但也是深入学习Dart无法绕过的一个槛。那么mixin到底是什么尼???下面来看维基百科对它的定义。mixin是面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法、变量而不必成为其子类。简而言之,mixins是普通的类,我们可以从中扩展方法(或变量)而...
摘要由CSDN通过智能技术生成

随着Dart学习的深入,发现了一个比较棘手的语法——mixin。它对于Java开发人员来说,是一个全新的概念,但也是深入学习Dart无法绕过的一个槛。

那么mixin到底是什么尼???下面来看维基百科对它的定义。

mixin是面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法、变量而不必成为其子类。

简而言之,mixins是普通的类,我们可以从中扩展方法(或变量)而不扩展类。

应用场景

首先我们来看一个应用场景。

图片来自于 Dart: What are mixins?

在上图中,有一个类——Animal,它有三个子类——MammalBirdFish,而这三个类也有其对应的子类。

下面分别通过JavaDart来实现上面这些类及其继承关系。

Java代码

//Java代码
public class Animal {...}
public class Mammal extends Animal {...}
public class Bird extends Animal {...}
public class Fish extends Animal {...}
public class Dolphin extends Mammal {...}
public class Bat extends Mammal {...}
public class Cat extends Mammal {...}
public class Dove extends Bird {...}
public class Duck extends Bird {...}
public class Shark extends Fish {...}
public class FlyingFish extends Fish {...}

Dart代码

//Dart代码
class Animal {...}
class Mammal extends Animal {...}
class Bird extends Animal {...}
class Fish extends Animal {...}
class Dolphin extends Mammal {...}
class Bat extends Mammal {...}
class Cat extends Mammal {...}
class Dove extends Bird {...}
class Duck extends Bird {...}
class Shark extends Fish {...}
class FlyingFish extends Fish {...}

代码几乎一摸一样,下面就根据上图来分别给这些类添加行为——WalkSwimFlying。由于这些行为并不是所有类通用的,所以不能将这些行为放在父类。但如果把这三个行为分别放在三个类中,然后让其他类来继承这三个类,也就可以解决上述问题。但这样就是多继承,而JavaDart又不支持多继承。所以这时候凸显出接口的重要性,通过接口来实现上述行为。代码如下:

//行走行为
public interface Walk {
   
    void walk();
}
//游泳行为
public interface Swim {
   
    void swim();
}
//飞翔行为
public interface Flying {
   
    void flying();
}
//海豚可以游泳
public class Dolphin extends Mammal implements Swim {
   
    @Override
    public void swim() {
   ...}
}
//蝙蝠可以飞、行走
public class 
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值