Dart基础 Mixins extends implements 详解

今天来学习Flutter语言Dart中的Mixins机制,以及与extends和implements之间的区别。

定义

首先来看Mixins关键字的官方定义,其余extends和implements关键字基本定义与java基本相同,所以定义不详述,可以直接看下面的例子:
Mixins:

Mixins are a way of reusing a class’s code in multiple class hierarchies.
Mixins是一种在多个类层次结构中重用类代码的方法。

在Java中,是不存在Mixin继承关系的。从定义中可以看出,Mixins主要解决的是代码复用问题。

Mixins使用的关键字是with,就像继承使用extends一样。

一味说概念还是太模糊,接下来我们就举个简单的例子从java 实现和dart实现的角度来说明Mixin的巧妙之处以及与extends和implements的区别。

例子

举一个简单的例子:
Java开发工程师A可以熟练使用Java,C语言
Android开发工程师可以熟练使用Java,Kolin语言
iOS开发工程师可以熟练掌握oc,c语言

ok,先用java来把上面这个层级关系理一下:
在这里插入图片描述

因为java中不存在多继承,而且掌握语言的种类并不是所有的开发工程师都一样,所以这里采用接口的形式来实现,接下来我们来看不用Mixins机制的话Dart应该如何实现。

在这里插入图片描述

dart跟java一样类也是只能单继承的,在dart中是没有interface接口这个东西。

dart中任何类都是接口,你可以实现任何一个类,然后重写那个类里面的所有方法。

上面的实现中我们可以看到JavaEngineer和AndroidEngineer实现了同一个MasterJava类,然后实现也是一模一样的,所以这就造成了最上面我们定义中讲到的多个类层次结构中重用类代码。

我们来看下使用Mixins机制如何实现:

在这里插入图片描述

是不是瞬间去掉了很多重复代码,代码也变得清爽很多了,我们来看实现结果:

在这里插入图片描述

在我看来,Mixins机制的作用在于每个具有某项特性的类不用再去具体的实现同样的功能,这是interface接口做不到的功能,上层可以专门负责有什么特性,下层可以只需要关心实现功能即可。

tips Mixins优先级

看下面两个例子:
在这里插入图片描述

with了两个类,两个类下要实现的方法名一样,那么会下层实现类会实现哪个方法呢?答案很明显了,with越后面的类,优先级越高。
在这里插入图片描述

第二个例子是with了一个类,implements了一个类,两个类下要实现的方法名字相同,那么哪个优先级高呢?

工作台可以看到,with的优先级更高。

这里要注意的是代码实现的时候你要先with再implements,不然会报错。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jieqiang3/article/details/90208242