Skip to content

基本使用

  1. 声明一个类
dart
class Point {
  // 类成员
  int x = 0;
  int y = 0;
  int? z;
  
  // 构造函数
  Point(int x, int y, [int z = 0]) {
    this.x = x;
    this.y = y;
    this.z = z;
  }
  
  // 方法
  void getInfo() {
    print('($x, $y, $z)');
  }
}
  1. 构造一个类实例
dart
Point p1 = new Point(0, 0);
p1.getInfo();
// 可以省略 new
Point p2 = Point(1, 1);
p2.getInfo();

构造函数

  1. 默认构造函数
    • 如果没有声明构造函数,会自动生成一个无参数的构造函数并且该构造函数会调用其父类的无参数构造方法
  2. 语法糖
dart
class Point {
  int x = 0;
  int y = 0;
  int? z;
  
  Point(this.x, this.y, [this.z]);
}
  1. 命名构造函数
    • 为一个类声明多个命名式构造函数来表达更明确的意图
dart
class Point {
  int x = 0;
  int y = 0;
  int? z;
  
  Point(this.x, this.y, [this.z]);
  // 命名构造函数
  Point.twoD(this.x, this.y);
}

// 使用
Point p = new Point.twoD(0, 0);

私有属性及私有方法

dart
class Point {
  int _x;
  
  Point(this._x);
  
  int getX() {
    return _x;
  }
  
  void setX(int x) {
    _x = x;
  }
}

Point p = Point(0);
print(p.getX()); // 0
p.setX(1);
print(p.getX()); // 1

getter和setter

dart
class Point {
  int x;
  int y;
  
  Point(this.x, this.y);
  
  get sqrt {
    return x * x + y * y;
  }
  
  set newX(int x) {
    if (x != null) {
      this.x = x;
    }
  }
}

Point p = Point(3, 4);
print(p.sqrt); // 5

静态成员

静态方法只能访问静态属性,不能访问非静态属性

非静态方法可以正常访问静态属性

dart
class Point {
  static int x = 0;
  
  static void setX(int x) {
    Point.x = x;
  }
}

Point.setX(1);
print(Point.x); // 1

抽象类及实现

  1. 使用关键字 abstract 标识类可以让该类成为 抽象类
dart
abstract class Info {
  void getInfo();  
}
  1. 使用关键字 implements 实现抽象类,可实现多个,使用 , 分隔
dart
class Point implements Info {
  int x = 0;
  
  void getInfo() {
    print(x);
  }
}

扩展

子类继承父类使用 extends 关键字,dart 没有多继承

重写方法最好加上 @override 注解,便于协作

子类构造方法中,如果要初始化父类构造方法,使用 super 关键字

子类中调用父类的方法使用 super.fun()

dart
class Animal {
  String name;
  Animal(this.name);
  void speak() {}
  void printInfo() {
    print('My name is ${name}');
  }
}

class Dog extends Animal {
  String nickName = '';
  Dog(String name, String nickName) : super(name);
  @override
  void speak() {
    super.printInfo();
    print('$nickName speak wang wang!');
  }
}

void main() {
  Dog d = new Dog('dog', 'money');
  d.speak(); // My name is dog speak wang wang!
}