美文网首页js css html
Flutter-Dart的构造函数

Flutter-Dart的构造函数

作者: 阿博聊编程 | 来源:发表于2022-04-09 21:59 被阅读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({});
    }
    

    相关文章

      网友评论

        本文标题:Flutter-Dart的构造函数

        本文链接:https://www.haomeiwen.com/subject/germsrtx.html