初见

flutter-之构造函数2020-03-22

2020-03-22  本文已影响0人  菩提_

所谓一步一个脚印,以前学习东西总是模棱两可,这次解决了下次可能再遇到类似的问题总是会出现一些问题 现在开始就要学会追根究底,现在总不能看表面

注意点:看了些资料关于构造函数自己也总结了一下:

1.子类的构造函数必须调用父类构造函数,子类的默认构造函数调用父类的默认构造函数 ,子类的命名构造函数有两种调用方式,一种是默认调用父类的未命名无参数构造函数,另一种是指定调用父类的构造函数

2.子类不可以继成父类的构造函数

3.若父类只有命名构造函数,那么子类必须指定父类命名构造函数,因为父类没有实现默认构造函数,子类如果没有指定调用父类构造函数,子类会默认调用父类的默认构造函数,而父类没有实现 就会报错!!!

在使用继承类最好先实现默认构造函数,这样子类不会出现莫名的错误

以下是构造函数的种类:

1.默认构造函数(未命名无参数的构造函数),子类没有实现构造函数,则会自动生成一个默认构造函数,并且会默认调用父类的默认构造函数

2.命名构造函数,

     A.xxx(){},关于调用父类的构造函数,这里是默认调用父类的默认构造函数

A.xxx():super(type typename){}这里是指定调用父类的构造函数

3.重定向构造函数 A.xxx():this(type typename){}

4.常量构造函数:如果你的类需要成为永远不会更改的对象,则可以使这些对象成为编译时常量。 定义const构造函数要确保该类的所有实例变量都是final。父类中有常量构造函数,则子类可不含有常量构造函数

5.工厂构造函数

在实现不用总是创建新的类对象的时候,可以使用factory关键字。 例如,工厂构造函数可能从缓存中返回实例,或者它可能返回子类型的实例:

class Logger {

  final String name;

  bool mute = false;

  //工厂构造函数无法访问this,所以这里要用static

  //维护一个缓存的Map对象,

  static final Map<String, Logger> _cache =

      <String, Logger>{};

//调用该构造函数的时候,会从Map中取出对象

  factory Logger(String name) {

    if (_cache.containsKey(name)) {

      return _cache[name];

    } else {

      final logger = Logger._internal(name);

      _cache[name] = logger;

      return logger;

    }

  }

  Logger._internal(this.name);

  void log(String msg) {

    if (!mute) print(msg);

  }

}

//调用

var logger = Logger('UI');

logger.log('Button clicked');

上一篇 下一篇

猜你喜欢

热点阅读