https://cloud.tencent.com/developer/article/1889373
一、类定义
1、 类
class 普通类 (成员方法必须要实现)
mixin 多继承,混入类(不能有构造方法)
abstract class 抽象类 (定义抽象方法)
2、类继承, 3个关键字:
extends 继承
implements 继承(父类方法必须要实现)
with 多继承(父类不能有构造方法)
3、约束:
on 约束(继承mixin类的类,必须同时继承约束类)
extends 和 on 只能用一个。on用在mixin类后面,表示继承该mixin类的那些类,也需要继承on类
例如这样:
class A1 extends A4 {}
class A2 {}
mixin A3 on A4 {}
class A4 {}
class A5 extends A1 with A3 implements A2 {}
二、类扩展
https://juejin.cn/post/6844904191488425992
给一个现有的类,扩展方法。
extension 名字 on 某个类名{
新方法;
}
在当前文件有效:扩展名字下滑线开头,或者省去扩展名字。
想到了objective-c的extension和category,类扩展(extension)是分类(category)的一个特例,有时候也被称为匿名分类 。
extension _名字 on 某个类名{
新方法;
}
例如这样:
extension TxtExtensions on String {
String get transformUnicode {
var transform =
this.replaceAllMapped(RegExp('\\\\U111[0-9a-zA-Z]{5}'), (match) {
var radixString =match.group(0).substring(4);
return radixString;
});
return transform;
}
扩展属性可以吗? 不可以。其他的限制我从别的地方复制过来了:
扩展不支持的,有报错的时候应该就可以对号入座,因为编译器会直接报错。
- 声明一个具有与扩展名相同的基本名称的成员。
- 声明与扩展名相同的类型参数。
- 声明一个具有与任何扩展程序类型参数名称相同的基本名称的成员。
- 声明两个具有相同基本名称的成员,除非一个成员是getter而另一个是setter。
- 声明一个具有相同名字的setter和getter,一个是静态的,另一个不是。
- 声明具有相同名字成员作为成员声明由Object(==,hashCode,toString,noSuchMethod,runtimeType)。这适用于静态和实例成员声明。
- 声明一个构造函数。
- 声明一个实例变量。
- 声明一个抽象成员。
- 声明成员,其正式参数标记为covariant。
网友评论