记录自学flutter点点滴滴

Flutter 学习之旅(四) 类、接口和继承以及mixi

2020-07-27  本文已影响0人  Tsm_2020

类与继承

Dart 中类和java 相似,都是用class定义,抽象类用abstract 标识,抽象类中可以包含已经实现的方法,也可以包含未实现的方法,

与java不同的是,抽象方法不需要abstract 抽象类的关键字,只需要该方法未实现即可

继承也与java的功能相似,用extends 定义 ,子类可以继承父类的方法,如果想要修改可以重写.

例子

Base抽象类中包含了三个已经实现的方法,和一个未实现的抽象方法,

BClass  继承了 Base  并重写了 a(),b(),c()方法,实现了Base类未实现的方法d();

接口

Dart 中其实并没有接口的概念,任何class 都可以作为接口被其他类实现,这里面有一个比较有意思的地方,

AClass 中已实现的方法,当AClass 作为接口被EClass实现的的时候, EClass无法调用AClass中已经实现的方法,即super.method();这个不能用,感觉这个概念和java类似,java是在接口中压根就没有实现,所以掉用不了,dart中虽然实现了,但是调用不了

也就是说作为接口被实现的时候,他所实现的方法不能被实现他的类调用,而且EClass 中必须重写所有AClass方法

所以感觉在实际开发过程中,如果一个类想要当做接口被实现,利用 抽象类  定义抽象方法,用这个抽象类作为接口被实现应该是最好的解决方法了

mixins

mixins  混入,  这个是dart新引入的概念,  他的写法是

class cls extends cls1  with cls2,cls3{

}

如果cls1与  cls2和cls3中存在相同命名的方法,他的基础执行顺序是从右到左依次执行,

我们还是以上面  Base  AClass  BClass  为例 ,为了更好的区分,我们再引入另一个类AClass2  他有了 a()方法和g()方法,  AClass 实现了  a(),b() 两个方法 ,Base 中  有a(),b(),c(),d() 四个方法

其中a()方法为所有类中都包含的方法,如果想要执行谁的a()方法,按照右到左的顺序执行,哪个类的排名应该在最后,

而且已with 为关键字所指向的类,不能含有构造方法,不能继承除了Object的其他类,也就是无法继承其他类,否则报错,

例子

                        这个是简写

这个是完整的写法,

如果某个类想要简写,就必须除了拼装他所需要的类,不能再含有其他属性,

main方法执行的代码

结果

分析一下为什么结果会是这样,

class CClass = BClass with AClass,AClass2;

a():这个方法是所有混入的类中共有的方法,按照从右到左的有效顺序,a()方式应该选择ACass2的方法,所有打印的日志为  AClass2  a();

b():这个方法为AClass 与Base 方法共有的方法,按照从右到左的顺序,应该执行AClass 中的b(),所有打印的是AClass b();

c():这个方法为BClass类中的方法,所以执行BClass中的方法,先执行 super.c(),在执行 BClass.c()方法

d();与g()方法都是只有一个类中有,执行有这个方法的类就可以了

我学习flutter的整个过程都记录在里面了

https://www.jianshu.com/c/36554cb4c804

最后附上demo 地址

https://github.com/tsm19911014/tsm_flutter

上一篇 下一篇

猜你喜欢

热点阅读