Skip to content

Class

构造函数

默认构造函数

dart
class Star {
  late String name;
  late int age;

  Star(this.name, this.age);

  void sing() {
    print('sing');
  }
}
dart
class Star {
  late String name;
  late int age;

  Star(String name, int age) {
    this.name = name;
    this.age = age;
  }

  void sing() {
    print('sing');
  }
}

命名构造函数

dart
class Star {
  late String name;
  late int age;

  Star() {
    print('Star');
  }

  Star.Kun() {
    print('Kun');
  }
}

属性和方法

getter 和 setter

计算属性!

dart
class Star {
  late String firstName;
  late String lastName;

  Star(this.firstName, this.lastName);

  String get fullName {
    return '$firstName $lastName';
  }

  void set fullName(String fullName) {
    List<String> names = fullName.split(' ');
    this.firstName = names[0];
    this.lastName = names[1];
  }
}

私有属性和方法

外部无法访问这些私有属性和方法,只有类里边可以相互调用。

dart
class Star {
  late bool _isBlack;

  Star(this._isBlack);

  void _jump() {
    print('jump inside');
  }
}

静态属性和方法

静态方法只能访问静态属性和静态方法,因为没有实例化

非静态方法可以访问所有属性和方法

访问静态属性和方法不需要加 this

因为 this 指向的是类创建的实例对象,而不是类本身

dart
class Star {
  static String song = '鸡你太美';

  static void sing() {
    print(song);
  }
}

Star.sing();

继承

构造函数

dart
class Kun extends Star {
  late bool isBlack;

  Kun(super.name, super.age, this.isBlack);
}
dart
class Kun extends Star {
  late bool isBlack;

  Kun(String name, int age, bool isBlack) : super(name, age) {
    this.isBlack = isBlack;
  }
}

覆写和调用

dart
class Kun extends Star {
  late bool isBlack;

  Kun(super.name, super.age, this.isBlack);

  @override
  void sing() {
    print('sing a song');
  }

  void ctrl() {
    super.sing();
    print('jump rap ball');
  }
}

抽象类

抽象类中没有方法体的方法就是抽象方法

抽象类的抽象方法需要子类去实现

dart
// 抽象类
abstract class Bird {
  fly();
}

// 继承
class Eagle extends Bird {
  @override
  fly() {
    print('我是鹰,我是鸟类,我需要飞行!');
  }
}

// 接口
class Plane implements Bird {
  @override
  fly() {
    print('我是飞机,我需要飞行,但我不是鸟类');
  }
}