美文网首页
Dart(6)类

Dart(6)类

作者: 谜夨_ | 来源:发表于2019-12-31 16:37 被阅读0次

类的定义和使用,构造函数,对象的类型

void main() {
  var p = Point(2, 3); //省略了new
  p.showPoint(); //x is 2,y is 3
  p?.x = 5; //如果P不是null 给 X赋值5
  p.showPoint(); //x is 5,y is 3

  //null判断
  Point nullPoint;
  nullPoint?.x = 6; //nullPoint 空不执行
  nullPoint?.showPoint(); //

  //类型
  print(p.runtimeType); // Animal

  //构造函数
  var p2 = Point.createInstance({"x": 1, "y": 2});
  print(p2);//Instance of 'Point'
  p2.showPoint();//x is 1,y is 2
}

class Point {
  num x, y;

  //构造函数
  Point(this.x, this.y);

//   另外一种
//   Point(num x, num y) {
//     this.x = x;
//     this.y = y;
//   }

  // 命名构造函数
  Point.createInstance(Map values) {
    x = values["x"];
    y = values["y"];
  }

  showPoint() {
    print("x is $x,y is $y");
  }
}

记住构造函数是不能被继承的,这将意味着子类不能继承父类的命名式构造函数,如果你想在子类中提供一个与父类命名构造函数名字一样的命名构造函数,则需要在子类中显式地声明。

调用父类非默认构造函数

默认情况下,子类的构造函数会调用父类的匿名无参数构造方法,并且该调用会在子类构造函数的函数体代码执行前,如果子类构造函数还有一个,那么该初始化列表会在调用父类的该构造函数之前被执行,总的来说,这三者的调用顺序如下:

  1. 初始化列表
  2. 父类的无参数构造函数
  3. 当前类的构造函数

如果父类没有匿名无参数构造函数,那么子类必须调用父类的其中一个构造函数,为子类的构造函数指定一个父类的构造函数只需在构造函数体前使用(:)指定。

常量构造函数

class Point {
  static final Point origin =  const Point (0, 0);

  final num x, y;

  const Point (this.x, this.y);
}

工厂构造函数

class Logger {
  final String name;
  bool debug = false;

  static final Map<String, Logger> _cache = <String, Logger>{};
  Logger._internal(this.name);

  factory Logger(String name) {
    return _cache.putIfAbsent(name, () => Logger._internal(name));
  }

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

main() {
  var logger = Logger('UI');
  logger.log('Button clicked');
}

抽象类和抽象方法

使用关键字 abstract 标识类可以让该类成为 抽象类,抽象类将无法被实例化。抽象类常用于声明接口方法、有时也会有具体的方法实现。如果想让抽象类同时可被实例化,可以为其定义工厂构造函数。

实例方法、Getter 方法以及 Setter 方法都可以是抽象的,定义一个接口方法而不去做具体的实现让实现它的类去实现该方法,抽象方法只能存在于抽象类中。

abstract class Player {
  // 定义实例变量和方法等等
  void playerSwitch(); // 定义一个抽象方法
}

class EffectivePlayer extends Player {
  void playerSwitch() {
    // 实现
  }
}

重写

相关文章

  • Dart(6)类

    类的定义和使用,构造函数,对象的类型 记住构造函数是不能被继承的,这将意味着子类不能继承父类的命名式构造函数,如果...

  • dart语法6-类

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • Flutter/Dart - Dart中的抽象类 多态 和接口

    Dart中的抽象类 Dart中的抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口...

  • Dart --类

    类概述 普通类变量实例变量(创建对象后,使用 对象.变量名 调用)静态变量(用static修饰,使用 类...

  • Dart 类

    定义一个类 -> 如果想定义一个私有属性,那么加上_ ,「dart里面没有重载函数」如果想用,那么 类名.xxx ...

  • Dart 类

    //不可变 class ImmutabelPoint { final int x; final int y; ...

  • Flutter 代码规范整理

    Dart 语法简介 Flutter是使用Dart语言开发的。Dart语言是基于类的纯面向对象语言。Dart 中的所...

  • 10.Dart-抽象类

    /** * Dart中的抽象类 * Dart抽象类主要用于定义标准, 子类可以继承抽象类, 也可以实现抽象类接口...

  • flutter【7】dart语言--类

    类 dart 是纯面向对象语言,每个对象都是某个类的实例,并且所有类都是继承自 Object。 dart中继承使用...

  • 带你Dart带你Diao之类(二)

    在上一篇博客,笔者介绍了Dart类的构造方法 带你Dart带你Diao之类(一) 这一篇博客是介绍Dart类的其他...

网友评论

      本文标题:Dart(6)类

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