Appearance
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('我是飞机,我需要飞行,但我不是鸟类');
  }
}