Flutter 实战6
智慧rdda大成 智慧RdDa大成 今天
上面简单讲了类,还记得吗?这是是什么
class C {
static void m() {}
}
extension E on C {
void f() {
m();
}
}
Dart 抽象类和抽象方法
抽象类是面向对象开发中较为难理解的一点。在Dart中,抽象类中可以定义抽象方法。所谓抽象方法,是指只有定义却没有实现的方法,抽象是面向接口开发的基础。以生活中汽车产品的生产为例,一辆完整的汽车的生产往往需要多个厂家合作,例如发动机生产厂家、轮胎生产厂家、门窗内设生产厂家等。不同的厂家生产的配件若要完美地组合成一辆汽车,则必须遵守统一的标准,也可以理解为按照实现的协议进行生产。在编程中也是这样的,一个复杂的程序可能需要很多开发者甚至多个部门进行配合开发,每个开发者或部门负责一个模块,而模块之间又可以进行交互与连通,这时在程序真正编写前,我们就需要先约定协议、制定接口。
现在你应该理解了,抽象类实际上就是一个接口,接口中定义了未实现的方法告诉调用者:如果有类实现了这个接口,这个类就拥有接口所描述的功能。例如,我们可以为人类定义一个接口,示例如下:
abstrace class PeopleInterface{
People();
}
上面的PeopleInterfaceInterface接口中只定义了一个抽象方法,People类可以对这个接口进行实现,示例代码如下:
class People implement PeopleInterface{
String name;
int age;
String cardnumber;
People(this.name,this.age,this.cardnumber);
void SayHello(String toName){
print("Hello $(toName),我是$(this.name),年龄是$(this.age),证件号码是$(this.cardnumber)"
}
}
抽象类不可以被实例化,即不能直接使用抽象类来构造实例对象,只能通过实现这个抽象类接口的类或者继承它的子类来实例化对象
Dart 异常
void f() {
try {
int.parse(';');
} on FormatException catch (e) {
// ignored
}
}
void f() {
try {
// ...
} catch (exception, stackTrace) {
// ...
}
}
实际编写程序,会具体定义f是什么例如:定义一个Tearcher类。People 类或者role等等。
Dart 类的继承
继承是类的重要特性。子类继承父类后,可以直接使用父类中定义的属性和方法,并且子类可以对父类的方法进行重写以实现定制化的功能。继承其实很容易理解,现实中的事物为了方便描述与归纳,也会进行分门别类,例如生物界可以分为动物和植物,动物类下面又可以分出鱼类、鸟类等,动物类就是生物的子类,鱼类、鸟类又是动物类的子类。越是上层的类,封装的属性和方法越通用,子类会在父类的基础上进行扩展,增加许多独特的属性和方法。
在Dart中,使用extends关键字进行类的继承。以教师类为例,我们可以定义一个人类作为其父类,示例如下:
class Teacher expends People{ //继承上面的People类
Teacher(name,age,cardnumbe):super(name,age,cardnumber)
//构造方法直接调用了父类的构造方法
Teaching(){
print("$(name)老师正在教学。");
}
@override
SayHello(){
super.SayHello();
print("我是$(name)")
}
}
@override 子类重载了父类的SayHello;
重载运算符非常简单,却是非常强大的一个功能,在Dart中支持重载的运算符如表
枚举类型
枚举是一种特殊的类型,其用来描述有限个数的数据集合。比如前面在定义教师类时,其中定义了一个科目的属性,虽然我们将其定义为字符串类型,但是这并不十分严谨,教师所教学科目的类目是有限的,而且应该是固定的,不会随意增减,对于这种情况,使用枚举非常合适。
enum Subject(
Dart,java,C++,C#,
Swift,
Python
)
enum 关键字用来定义枚举,下标用0开始
扩展类的功能——Mixin特性
Mixin是Dart中非常强大的一个特性。通过前面的学习,我们知道,Dart只支持单继承,即子类只能够有一个父类。有的时候,我们需要集合多个类的功能来实现一个复杂的自定义类,就需要使用到Mixin特性。
Mixin从字面来理解为混合的意思,顾名思义,Mixin的主要作用也是进行混合,其允许一个类将其他类的功能混合进。
泛型是Dart语言另一十分强大的特性,泛型使得Dart中的类型更加动态,并且大大提高了代码的重用率。