1.继承 extends
- Flutter 中的继承是
单继承
。 - 子类可以通过
@override
来重写父类方法 构造函数不能被继承
- 没有共有和私有访问符,可以直接访问超类中所有变量和方法
- 一般情况下,带下划线属性表示私有变量
2.接口实现(implements)
- 没有(interface)关键字,但每一个类都是一个隐式的接口。
- class 就是 interface
- 当class被当做interface用时,class中的方法就是接口的方法,需要在子类里重新实现,在子类实现的时候要加@override
- 当class被当做interface用时,class中的成员变量也需要在子类里重新实现。在成员变量前加@override
- 实现接口可以有多个
3.Flutter中的Mixins
- Mixins 使我们可以在无需继承父类的情况下为此类添加父类的“功能”,可以在同一个类中具有一个父级和多个 mixin 组件。
- Mixins 不可以声明任何构造函数。
- 给 Mixins 添加限定条件使用 on 关键字。
- 混合使用 with 关键字,with 后面可以是 class、abstract class 和 mixin 的类型。
- Mixins 不是多重继承,相反,它只是在多个层次结构中重用类中的代码而无需扩展它们的一种方式。
- mixins类只能继承自object
- mixins的对象是类
- 一个类可以mixins多个mixins类
- 可以mixins多个类,不破坏Flutter的单继承
4.构造方法
如果没有自定义构造方法,则会有个默认构造方法
如果存在自定义构造方法 默认构造方法将失效
构造方法不能重载
命名构造方法
使用命名构造方法 可以实现多个构造方法
使用 类名.方法 的形式实现
class Person {
string name
int age
final string sex
/**
* 这里 使用this的语法糖可以对final类型赋值
* 但是写在构造方法中就不行了,因为执行在构造方法之前
*/
Person (string name ,this.age ,this.sex) { // 第二种是语法糖,
this.name = name
print(age)
}
}
var per = new Person('jack', 20)
---------------------------------------
命名构造方法
class Person {
string name
int age
final string sex
Person (string name ,this.age ,this.sex) { // 第二种是语法糖,
this.name = name
print(age)
}
Person.withName(string name) {
this.name = name
}
}
<!-- 多个构造方法 类似oc -->
new Person('jack', 12, 'man')
new Person.withName('marry')
4.生命周期
State 的生命周期可以分为 3 个阶段。
State 初始化时会依次执行 :构造方法 -> initState -> didChangeDependencies -> build,随后完成页面渲染。
Widget 的状态更新,主要由 3 个方法触发:setStState、didchangeDependencies 与 didUpdateWidget。
Widget 组件销毁相对比较简单,系统会调用 deactivate 和 dispose 这两个方法,来移除或销毁组件。