js css html

Flutter-Dart的构造函数

2022-04-09  本文已影响0人  阿博聊编程
Flutter,图片来源于网络

构造函数是类用来实例化类对象并且与类名同名的方法。这篇文章就来分享一下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);
}

关于构造方法,我们还有一点需要注意的是:

构造函数是不能被子类继承的,如果子类没有自定义构造函数,那么它的构造参数就是空的。

构造函数分类

  1. 默认构造函数,上面说的空构造函数就是默认构造函数;
  2. 普通构造函数,上面简单的自定义构造函数就是普通构造函数;
  3. 命名构造函数;
  4. 常量构造函数;
  5. 工厂构造函数。

命名构造函数

命名构造函数的语法:

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({});
}
上一篇 下一篇

猜你喜欢

热点阅读