• Young
    2019-07-13
    1.一般来讲,单继承,多实现,混入是多继承
    A.继承是子类需要复用父类的方法实现
    B.实现接口是复用接口的参数,返回值,和方法名,但不复用方法的实现,在Dart中实现抽象类 更像在java中实现用interface修饰的接口
    C.混入是多继承,当被混入的类有多个同名方法时,调用子类的该方法时,会调用with声明的最后一个拥有该方法的类中的该方法,同时混入中的父类不能继承

    作者回复: 厉害了

     3
     34
  • 宋锡珺
    2019-07-14
    1.
    父类继承:和java类似,继承了父类的实例变量和各种方法。但是不能用一个普通方法重写getter。
    抽象类:抽象类不能实例化,会报出AbstractClassInstantiationError错误。
    接口:成员变量,成员函数需要重新声明实现。和java不一样的是,没有接口声明,可以通过抽象类来描述接口。
    mixin:使一个类有多个父类。例如:在Flutter中常见的我们需要继承state。如果需要页面保持状态,我们还需要AutomaticKeepAliveClientMixin来保持页面状态。这时就需要通过with来使用mixin.
    2.
    子类构造函数调用父类非命名,无参构造函数。先父后子。
    1.初始化列表
    2.父类的无参构造函数
    3当前类的无参构造函数
    通过named constructors可以使父类有多个构造函数,但是子类是不能继承父类的构造函数的。如果使用父类的构造函数,子类需要实现父类的构造函数。
    展开

    作者回复: 厉害了

    
     10
  • Geek_869250
    2019-07-29
    mixin和react有什么不同,react已经不使用了

    作者回复: 没啥不同。Mixins 的问题在于太过于灵活,与OOP的设计思路完全相反,小范围用问题不大,但如果你的类中引用了多个mixin,必须非常清楚每个mixin都干了什么,你使用的方法来自于哪个mixin,否则有代码被覆盖的风险。

     1
     3
  • Phony Lou
    2019-07-14
    一个小问题,在覆写相等运算符时为何需要传入dynamic变量,而不能传入Vector呢?
    bool operator==(dynamic v) => x == v.x && y == v.y;
    bool operator==(Vector v) => x == v.x && y == v.y; // 报错

    作者回复: 因为operator==是继承自Object类,这个类的参数声明就是dynamic

    
     3
  • 昨夜星辰
    2019-07-17
    可选命名参数和可忽略参数有什么区别?

    作者回复: 对调用者调用方式不同,一个需要显式声明参数名,参数位置无所谓;一个不用,但需要按照顺序摆放参数。

     1
     2
  • 小白入门
    2019-07-14
    小白问下
    Point(this.x, this.y) : z = 0;
    这里的‘ : ’的用法解释? 和‘=>’有什么区别?

    作者回复: :用于构造函数初始化其内部属性或做一些前置检查;
    =>是用于普通单行函数的语法糖

     2
     1
  • 加温后的啤酒
    2019-12-17
    老师,你文中说“子类可以根据需要覆写构造函数及父类方法”,这句话用在大多数编程语言比如java中是对的,但是用在Dart中是不对的吧。Dart构造函数的特点是子类不会继承父类的构造函数,Dart官方文档里也有提到“Subclasses don’t inherit constructors from their superclass”,所以也就谈不上覆写构造函数。老师,我的理解对吗?

    作者回复: “子类可以根据需要覆写构造函数”这里指的是子类可以通过子类自己的构造函数改变父类的变量初始化方式

    
    
  • sherry慈
    2019-12-15
    问老师一个问题,可选命名参数可以和必传参数共存吗

    作者回复: 当然可以呀

     1
    
  • Captain
    2019-11-13
    就像,具体什么是命名构造函数,好处是什么?什么是初始化列表?是指什么列表呢?好处是什么?

    作者回复: 命名构造函数就是给构造函数起了个名字,使用"类名.构造函数名"的方式初始化实例;
    初始化列表是在构造函数体外,对变量进行批量赋值的机制,不仅简洁,代码执行性能也更优。

    
    
  • 菜头
    2019-10-15
    命名构造函数?有例子吗

    作者回复: Point.bottom就是例子啊

    
    
  • 微笑美男😄
    2019-09-30
    有课件没 我是新手,按照课程上的示例代码写了以后,总是报错,运行不起来

    作者回复: 课程的全部示例代码参考:https://github.com/cyndibaby905/flutter_core_demo

    
    
  • 颜为晨
    2019-09-10
    可选命名参数是不是可以理解成 map?

    作者回复: 可以

    
    
  • Zxt
    2019-08-22
    为什么作为mixin的类 只能继承自object呢?也是为了防止多继承出现的菱形问题么?

    作者回复: Dart 1.13版本已经可以支持使用继承Object以外的类了

    
    
  • Zxt
    2019-08-21
    一个声明了构造函数的类 无法被别的类混入了 这个是为什么呢?

    作者回复: Mixin目前的实现是以完全忽略构造函数,忽略构造函数调用链的方式实现的,因此只支持隐式的构造函数。一旦放开mixin的构造函数支持,Dart势必需要支持一套新的关键字语法,来支持Mixin类继承链上的构造转发,代价太大。

    
    
  • Zxt
    2019-08-21
    请教个问题,一个类可以同时混入多个类嘛?

    作者回复: 可以呀

    
    
  • mj
    2019-07-28
    如果不加“_”,则默认为 public。不过,“_”的限制范围并不是类访问级别的,而是库访问级别

    请问库访问级别是什么意思

    作者回复: package

    
    
  • 云中大鹏
    2019-07-23
    dart中有没有的 == 与===的区别

    作者回复: 没有(但曾经有过)

    
    
  • JakePrim
    2019-07-16
    继承和接口实现,与java类似,但是混入就不太理解了,什么场景下会用到呢?flutter好像也用不到这么复杂的逻辑吧

    作者回复: 混入,以非继承的方式复用别的类的代码。

    恰恰相反哦,Flutter很多地方都用到了混入。

    
    
  • Mkl
    2019-07-13
    老师您好,请问“我们只要在声明变量与方法时,在前面加上“”即可作为 private 方法使用。如果不加“”,则默认为 public。”这里边的双引号中的内容是什么,看不到呀😳

    作者回复: 是“_”
    感谢提醒,我们改一下

    
    
我们在线,来聊聊吧