构造函数
默认构造函数
不声明构造函数,则提供默认的无参构造,和java类似。
普通构造函数
class Point{
num x,y;
//this指当前实例,Dart中,只有名称冲突时才使用它,否则,Dart的代码风格是要省略this的。
Point(num x,num y){
this.x = x ;
this.y = y ;
}
}
普通构造函数(简化写法)
class Point{
num x,y;
Point(this.x,this.y);
}
构造函数不是继承
“子类不从父类继承构造函数(下面说到的命名函数也不会继承)。没有声明构造函数的子类只有默认的构造函数(没有参数,没有名称)而不是从父类继承的构造函数。”
class Vehicle{
Vehicle(){
print("super Constructor") ;
}
Vehicle.get(){
print("super Run") ;
}
Vehicle.create(){
print("super create") ;
}
}
class Audi extends Vehicle{
Audi(){
print("Audi Constructor") ;
}
Audi.get():super.get(){
print("Audi run");
}
Audi.create(){
print("Audi create") ;
}
}
//调用
Audi audi0 = Audi() ;
Audi audi1 = Audi.create() ;
Audi audi2 = Audi.get() ;
//打印结果
I/flutter ( 660): super Constructor
I/flutter ( 660): Audi Constructor
I/flutter ( 660): super Constructor
I/flutter ( 660): Audi create
I/flutter ( 660): super Run
I/flutter ( 660): Audi run
总结:
1。无论是普通的构造方法,还是命名构造方法,都会默认地先调用父类的无参构造函数。
2。如果子类有特有的构造函数,会先调用父类的无参默认的构造函数,再调用子类的特有构造。
3。如果想要调用父类的特定的构造函数,需要使用双引号:super来指定。
简而言之:所有的构造函数,如果不指定,只会调用父类默认的无参构造。
可选参数传参