Dart-类

2019-07-27  本文已影响0人  哎呀啊噢
Dart是一种面向对象的编程语言.支持面向对象的特性,比如类、接口、抽象等;

代码示例:

class class_name {  
   <fields>
   <getters/setters>
   <constructors>
   <functions>
}

类包含:

构造方法
代码示例

//声明三个实例变量,所有的实例变量都会自动生成一个getter方法,没有声明为final的实例变量还会生成一个setter方法
class Point {
  num x; //声明实例变量x,初始值为null
  num y; //声明实例变量y,初始值为null
  num z = 0; //声明实例变量z,初始化为0


  Point(){}//默认生成一个无参的构造方法


  Point.fromXYZ(num x, num y, num z) {//命名构造方法,可以创建多个构造方法
    this.x = x;
    this.y = y;
    this.z = z;
    print("Point");
  }
  //简写
//    Point.fromXYZ(this.x,this.y,this.z);
}



//调用
void main(){
  Point point = new Point();//new 构造
  point.x = 1;
  point.y = 2;
  point.z = 3;

  Point point1 = Point.fromXYZ(1, 2, 3);//命名构造

}
//调用父类构造方法
class ColorPoint extends Point{

  String color;

  ColorPoint.fromXYZAndColor(num x, num y, num z, String color)
  :super.fromXYZ(x,y,z){
    this.color = color;
    print('ColorPoint');
  }

}

//调用
void main(){

  var p = ColorPoint.fromXYZAndColor(1, 2, 3, "color");
  print(p);

}
//常量构造方法
/*
* 定义一个const构造方法 ,所以变量声明为final
* */

class ImmutablePoint {
  final num x;
  final num y;
  const ImmutablePoint(this.x, this.y);
  static final ImmutablePoint origin =
  const ImmutablePoint(0, 0);
}
//工厂构造方法   如果一个构造方法并不总是返回一个新的对象,这个时候可以使用factory来定义这个构造方法。
class Logger {
  final String name;
  bool mute = false;

  static final Map<String, Logger> _cache =
  <String, Logger>{};

  factory Logger(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final logger = new Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) {
      print(msg);
    }
  }
}

//调用
void main(){
  //工厂
  var logger = new Logger('UI');
  logger.log('Button clicked');}

要注意的是工厂构造方法时没法访问this关键字的,所以上面就有了在类的内部这么调用构造方法的代码:final logger = new Logger._internal(name);
在上面工厂构造方法中,如果缓存中存在传入的name的key值,则取出缓存中的对应value返回。
如果缓存中没找到,就会通过命名构造方法来新建一个对象,缓存起来后返回

上一篇下一篇

猜你喜欢

热点阅读