flutter的with、implements、extends区别

1.首先从flutter的三种类型定义讲起:class(类)、abstract class(抽象类)、 Mixin(混入)

dart里面没有接口的类型,同时也是单继承语言。class和abstract class与java中的差不多,这里不多说,重点讲一下Mixin。编写成mixin的类,能很好的对代码进行复用,也能让dart实现“伪多重继承”,同时又不会造成多重继承导致的菱形问题

2.dart的with、implements、extends

extends:能重写父类属性或者方法,同时能通过super引用父类field
implements:必须重写所有属性和方法,且无法调用父类field
with:无需super关键字能直接调用父类方法或者属性

3.例子对比

void main() {
  Vector vector = Vector();
  Vector2 vector2 = Vector2();
  Vector3 vector3 = Vector3();
  vector.paint();
  vector2.paint();
  vector3.paint();
}

class Painter {
  int line = 0;
  paint() {
    print('$line');
  }
}

class Vector extends Painter {
  @override
  int get line => super.line + 1;
  @override
  paint() {
    print("$line");
  }
}

class Vector2 implements Painter {
  @override
  int line;

  @override
  paint() {
    print("$line");
  }
}

class Vector3 with Painter {}

3.控制台输出

flutter的with、implements、extends区别_第1张图片
图1

4.dart中尝试菱形伪继承

flutter的with、implements、extends区别_第2张图片
提示:The class ‘Vector3’ can’t be used as a mixin because it references 'super’
flutter的with、implements、extends区别_第3张图片图2

5.结论

从图1的控制台输出可以看出继承能重写field并引用父类field,实现implements则无法使用super获取父类属性,只能重写,混入能直接复用父类所有属性和方法。

你可能感兴趣的:(flutter,flutter,dart,继承)