Dart笔记(15):类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxl517116279/article/details/88544267

定义

class Point {
}

使用

var p = new Point();

构造函数

定义

class Point {
  num x;
  num y;
  Point(num x, num y){
    this.x = x;
    this.y = y;
  }
}

使用

var p = new Point(1, 2);
print([p.x, p.y]);

简化构造函数

定义

class Point {
  num x;
  num y;
  Point(this.x, this.y);
}

使用

var p = new Point(1, 2);
print([p.x, p.y]);

构造函数中初始化参数

定义

class Point {
  num x;
  num y;
  var origin;
  Point(this.x, this.y): origin = {x:x, y:y};
}

使用

var p = new Point(1, 2);
print([p.x, p.y, p.origin]);

命名构造函数

定义

class Point {
  num x;
  num y;
  Point.fromJson(Map json) {
    x = json['x'];
    y = json['y'];
  }
}

使用

var p = new Point.fromJson({"x": 1, "y": 2});
print([p.x, p.y]);

重定向构造函数

定义

class Point {
  num x;
  num y;
  Point(this.x, this.y);
  Point.fromJson(Map json) : this(json['x'], json['y']);
}

使用

var p = new Point.fromJson({"x": 1, "y": 2});
print([p.x, p.y]);

常量构造函数

class Point2 {
  //定义const构造函数要确保所有实例变量都是final
  final num x;
  final num y;
  static final Point2 origin = const Point2(0, 0);

  //const关键字放在构造函数名称之前,不能有函数体
  const Point2(this.x, this.y);

  @override
  String toString() {
    return 'Point2(x = $x, y = $y)';
  }
}

  //调用
  var p2 = const Point2(4, 4);
  print(p2);
  var p21 = Point2(4, 4); //创建的是非 常量对象
  var p22 = const Point2(4, 4);
  print(identical(p2, p21));//false
  print(identical(p2, p22));//true

工厂构造函数

当你需要构造函数不是每次都创建一个新的对象时,使用factory关键字。例如工程构造函数返回一个在缓存的中的实例或者返回一个子类的实例。

注意:工厂构造函数不能使用this。调用工厂构造函数,可以使用new关键字

void main() {
  var xm = Phone('android');
  xm.startup();
  xm.shutdown();
}

abstract class Phone {
  factory Phone(String name) {
    switch (name) {
      case 'android':
        return new AndroidPhone();
        break;
      default:
        return new IOSPhone();
    }
  }
  void startup();
  void shutdown();
}

class AndroidPhone implements Phone {
  void startup() {
    print('Android Phone 开机');
  }
  void shutdown() {
    print('Android 关机');
  }
}

class IOSPhone implements Phone {
  void startup() {
    print('IOS Phone 开机');
  }
  void shutdown() {
    print('IOS 关机');
  }
}

注意

当类中参数为final修饰时,参数不但不能被修改,还必须被构造函数初始化

class Point {
  final num x;
  final num y;
  Point(this.x, this.y);
  Point.fromJson(Map json) : this(json['x'], json['y']);
}

不能使用命名构造函数

class Point {
  final num x;
  final num y;
  Point.fromJson(Map json) {    //错误
    x = json['x'];
    y = json['y'];
  }
}
 

猜你喜欢

转载自blog.csdn.net/hxl517116279/article/details/88544267