Dart 面向对象extends[继承],with[混入],命名构造函数,构造函数

with的优先级比extends高,同时使用with和extends时,默认会继承with后面最后一个类里面的方法。
只使用implements时必须重写父类里面的所有方法。

 

void main(List<String> arguments) {
  var aa = A.cs();
  var a = A();
}

class A extends B with C implements C {
  //命名构造函数
  A.cs() {
    print('a类构造函数');
  }

  //构造函数
  A() {
    ///如果a类有b方法就会调用a类的b方法,
    ///如果没有就会调用父类的b方法,
    ///with的优先级比extends高。
    ///先查看with的类是否有b方法,
    ///然后再查看extends里面的类是否有b方法。
    b();
    this.b();

    ///他会先调用他父类的b方法,
    ///with的优先级比extends高。
    ///先查看with的类是否有b方法,
    ///然后再查看extends里面的类是否有b方法。
    ///
    /// 如果父类没有才调用a类的b方法。
    super.b();
  }

  b() {
    print('这是a类里面的b类');
  }
}

class B {
  b() {
    print('这是b类b方法');
  }
}

class C {
  b() {
    print('这是c类b方法');
  }
}

 

输出结果:

D:/flutter_sdk/flutter/bin/cache/dart-sdk/bin/dart.exe --enable-asserts C:\Users\90649\Desktop\classdart\bin\classdart.dart
a类构造函数
这是a类里面的b类
这是a类里面的b类
这是c类b方法

进程已结束,退出代码0
THE END
喜欢就支持一下吧
点赞10赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容