美文网首页
Dart语言基础-类对象声明与构造

Dart语言基础-类对象声明与构造

作者: 柳源居士 | 来源:发表于2019-08-05 23:42 被阅读0次

  1. 基于mixin的继承机制,每个类都只能有一个父类。
    每个对象都是一个类的实例,所有的类都继承于Object。
    使用new 或者构造方法来创建一个对象。

构造方法:

  • default 构造方法:
    与类名一致的构造方法。
    如果不指定,则会生成一个没有参数的,并调用父类的没有参数的构造方法。

  • named 构造方法:
    类名.构造方法名(参数){
    构造内容
    }
    构造方法名应该清晰表明你的构造意图。

  • redirecting 构造方法:
    重定向构造方法特征为没有具体实现,而是将实现重新定向到别的构造方法里。

class Point {
  num x, y;

  // The main constructor for this class.
  Point(this.x, this.y);

  // Delegates to the main constructor.
  Point.alongXAxis(num x) : this(x, 0);
}

与named constructor的区别是named constructor有具体的实现,而redirecting constructor依赖于定位的构造方法。

  • constant 构造方法:
    所有变量都为final。
    然后定义const 构造方法。
    定义原点:
class ImmutablePoint {
  static final ImmutablePoint origin =
      const ImmutablePoint(0, 0);

  final num x, y;

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

var a=const ImmutablePoint(1,1);
var b=const ImmutablePoint(2,1);
  • factory 构造方法:
    使用关键字factory 来修饰构造方法。
    特点:不总是返回一个新的实例。
    如下例子:可以从catch中返回一个存在的实例,或者可以返回一个子类实例。
class Logger {
  final String name;
  bool mute = false;

  // _cache is library-private, thanks to
  // the _ in front of its name.
  static final Map<String, Logger> _cache =
      <String, Logger>{};

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

//named constructor
  Logger._internal(this.name);

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

注意点:

  1. 构造方法不能被子类继承,如果子类想使用同样的构造方法,必须自己实现。
    子类如果没有定义构造函数,则只有一个默认构造函数 。

  2. 调用非默认的父类构造方法:

  • 先调用初始化列表
    同样使用 “ :”来初始化成员变量的值,各变量之间用“ ,”隔开。
class Point {
num x;
num y;

Point(this.x, this.y);

// Initializer list sets instance variables before
// the constructor body runs.
Point.fromJson(Map jsonMap)
    : x = jsonMap['x'],
      y = jsonMap['y'] {
  print('In Point.fromJson(): ($x, $y)');
}
}

main() {
var pointA = new Point.fromJson({"x": 1, "y": 2});
}
//输出:In Point.fromJson(): (1, 2)

就是说,在父类的构造方法调用前,完成了对成员变量的赋值。

  • 调用父类的无参数,无名称的构造方法

  • 调用自己的构造方法。
    如果父类没有无名称、无参数的构造方法,必须在子类中手动调用一个父类的构造方法。通过使用“ :”来调用父类的构造方法。


Because the arguments to the superclass constructor are evaluated before invoking the constructor, an argument can be an expression such as a function call:

class Employee extends Person {
  Employee() : super.fromJson(getDefaultData());
  // ···
}
  1. const 常量
    有些类提供constant constructor,可以通过constant 构造方法创造compile-time constant 常量,需要使用const 关键字标注在构造方法前面。
var p = const ImmutablePoint(2, 2);

语法糖:

  1. 使用this.x 参数来代替 参数名与类变量一致时的构造赋值。

相关文章

  • Dart语言基础-类对象声明与构造

    类基于mixin的继承机制,每个类都只能有一个父类。每个对象都是一个类的实例,所有的类都继承于Object。使用n...

  • Dart2 class & object

    Dart2 类与对象 类和对象 class 关键字声明一个类 创建对象 使用 new + 构造函数() 所有的对象...

  • Dart面向对象编程一

    Dart是面向对象的语言,第一部分主要内容: 类与对象,声明、创建及基本特性 构造方法及初始化列表 静态成员及对象...

  • Flutter -- 2.面向对象

    一. 类与对象 使用class关键字声明一个类 可以使用new跟上构造函数 所有的对象都继承Object Dart...

  • Dart 语法(二)

    类和对象 使用class关键字声明类 使用new、构造函数创建一个对象 所有对象继承自Object Dart中默认...

  • flutter开发 dart类(四)

    类 ​ Dart 是一个面向对象编程语言。 每个对象都是一个类的实例,所有的类都继承于 Object。 构造函...

  • Dart 面向对象相关知识点

    Dart 中的类和对象 使用 class 关键字声明一个类使用 new 加上构造函数来创建一个新的对象所有对象对继...

  • Flutter 代码规范整理

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

  • Dart整理

    Dart构造函数 普通构造函数和命名构造函数 默认构造函数一个类没有声明构造函数,默认会有一个无参构造函数,声明了...

  • ES6面向对象

    类声明与构造函数 class 声明类constructor 构造函数 继承与超类

网友评论

      本文标题:Dart语言基础-类对象声明与构造

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