类的声明与使用

  1. // 类的声明
  2. class Person {
  3. // 类属性声明
  4. String name;
  5. int age;
  6. int sex;
  7. // 普通构造函数
  8. Person(String name, int age, [int sex = 1]) {
  9. this.name = name;
  10. this.age = age;
  11. this.sex = sex;
  12. }
  13. // 方法声明
  14. void getInfo() {
  15. print(
  16. 'My name is ${name}, my age is ${age}, and I am a ${sex == 1 ? 'man' : 'woman'}');
  17. }
  18. // 修改类属性
  19. void changeName(String name) {
  20. if (name != null) {
  21. this.name = name;
  22. }
  23. }
  24. }

类的引入

import ‘lib/Person.dart’;

实例化 Person 类

Person p = new Person(‘ada’, 20, 0);
p.getInfo();

静态成员

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

  1. class Person {
  2. static String name;
  3. int age;
  4. static void setName(String name) {
  5. Person.name = name;
  6. // this.age = 20; // error
  7. }
  8. void printName() {
  9. print('name is ${Person.name}');
  10. }
  11. }
  12. void main() {
  13. Person p1 = new Person();
  14. p1.printName(); // name is null
  15. Person.setName('postbird');
  16. p1.printName(); // name is postbird
  17. print(Person.name); // postbird
  18. }

? 、is 、as 和 .. 操作符

? 操作符用于判断如果实例存在则调用方法,否则不调用
is 用于判断是否归属于某个类的实例或者子类
as 用于声明某个实例当做某个类使用,比如 子类 as 父类
.. 级联操作符用于串联操作

extends 继承

子类继承父类使用 extends 关键字,dart 没有多继承
重写方法最好加上 @override 注解,便于协作
子类构造方法中,如果要初始化父类构造方法,使用 super 关键字,比如 Dog(String name, int age, [String nickName]) : super(name, age);
子类中调用父类的方法使用 super.fun()

类的 多态

多态举个例子通俗来讲,就是将改变子类实例的类型是父类,父类能够调用子类中同名的方法,输出结果与子类相同,但是不能调用父类没有子类中拥有的方法。
实际上就是将子类的方法覆盖父类的方法。
Animal d1 = new Dog(); 虽然是 new Dog() 但是 d1 的类型是 Animal,因此调用 d1.speak() 时,实际上调用 d1 子类的方法差不多,但是因为 Animal 没有 run 方法,因此不能调用 d1.run()。

  1. class Animal {
  2. speak() {}
  3. }
  4. class Dog extends Animal {
  5. @override
  6. speak() {
  7. print('wang!');
  8. }
  9. run() {
  10. print('dog run!');
  11. }
  12. }
  13. void main() {
  14. print('---------多态------------');
  15. Animal d1 = new Dog();
  16. Dog d2 = new Dog();
  17. d1.speak(); // wang!
  18. // d1.run(); // Error: The method 'run' isn't defined for the class 'Animal'.
  19. d2.speak(); // wang!
  20. d2.run(); // dog run!
  21. }