构造函数是类用来实例化类对象并且与类名同名的方法。这篇文章就来分享一下Dart的构造函数
知识,希望对看文章的小伙伴有所帮助。
构造函数
默认情况下,Dart
会为每一个类自动声明一个空的构造函数。我们也可以自定义构造函数,来一个简单的代码举例:
class Fish{
String name;
String type;
Fish(String name,String type){
this.name = name;
this.type = type;
}
}
上面有使用this
关键字,是为了防止参数名和属性名发生冲突。再来一个使用代码示例:
Fish fish = new Fish('金龙鱼','小鱼');
print(fish.name);
这里需要注意的是,自定义自己构造参数之后,原本空构造参数就会失效,就不能使用new Fish()
来实例化对象。
构造参数简洁写法
Dart
给我们提供简洁构造参数写法,示例代码:
class Fish{
String name;
String type;
Fish(this.name,this.type);
}
关于构造方法,我们还有一点需要注意的是:
构造函数是不能被子类继承的,如果子类没有自定义构造函数,那么它的构造参数就是空的。
构造函数分类
- 默认构造函数,上面说的空构造函数就是默认构造函数;
- 普通构造函数,上面简单的自定义构造函数就是普通构造函数;
- 命名构造函数;
- 常量构造函数;
- 工厂构造函数。
命名构造函数
命名构造函数的语法:
ClassName.identifier()
命名构造函数,代码举例如下:
class Fish{
String name;
String type;
Fish.born(String name){
this.name = name;
this.type = '未知';
}
Fish(String name,String type){
this.name = name;
this.type = type;
}
}
使用这种函数可以定义多个意义不同的命名构造函数。命名构造函数,需要注意的是:
它还是不能被子类继承,但是可以重写父类名称相同的命名构造函数。
常量构造函数
假设类创建的对象永远不会改变,可以在编译期就创建这个常量实例,并且定义一个常量构造函数,并且确保所有的成员变量都是final的。代码举例:
class ImmutablePoint {
static final ImmutablePoint origin = const ImmutablePoint(0, 0);
final num x, y;
const ImmutablePoint(this.x, this.y);
}
工厂构造函数
想要创建一个工厂构造函数,我们使用到factory
关键字修饰普通构造函数,代码举例:
class Fish{
String name;
String type;
// Fish 单例具体实现
static Fish fish;
Fish._born(this.name):age = 0
factory Fish(){
if(fish == null){
fish = Fish._born('单例鱼');
}
return fish;
}
}
void main(){
Fish fish = new Fish();
print(fish.name);
}
调用父类的构造函数
当父类没有默认构造函数的时候,我们想要调用父类构造函数,就需要在子类的构造函数主体之前、冒号之后指定需要调用的构造函数,代码举例:
class Finsh extends Object{
Finsh.fromJson(Map data){
print('Finsh.fromJson')
}
}
class Goldfish extends Fish{
Goldfish.fromJson(Map data):Finsh.fromJson(Map data){
print('Goldfish.fromJson')
}
}
void main(){
var fish = new Goldfish({});
}
网友评论