面向对象编程

  1. 面向对象编程(OPP)的三大基本特征是:封装、继承、多态
    • 封装:封装是对象和类概念的主要特性。封装,把客观事物封装成抽象的类,并且把自己的部分属性和方法提供给其他对象调用,而一部分属性和方法则隐藏。
    • 继承:面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
    • 多态:多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
  2. Dart所有的东西都是对象,所有的对象都继承自Object类
  3. Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类
  4. 一个类通常由属性和方法组成
void main() {
  // 实例化Person类
  List list = new List();
  list.isEmpty;
  list.add('香蕉');
  list.add('苹果');

  Map m = new Map();
  m.isEmpty;
  m.isNotEmpty;
  m["name"] = "张三";
  m.addAll({"age": 20});

}

Dart中自定义类

class Person {
  String name = '张三';
  int age = 20;
  void getInfo() {
    print('姓名:$name,年龄:$age');
    print('${this.name}----${this.age}');
  }
  void setInfo(int age) {
    this.age = age;
  }
}
void main() {
  // 实例化Person类
  Person p1 = new Person();
  print(p1.name);
  print(p1.age);
  p1.setInfo(30);
  p1.getInfo();
}

Dart中的构造函数

class Person {
  String? name; // ? 表示可空类型
  int? age; // ? 表示可空类型 不加?会报错 
  // 默认构造函数
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  void getInfo() {
    print('姓名:$name,年龄:$age');
    print('${this.name}----${this.age}');
  }
  void setInfo(int age) {
    this.age = age;
  }
}
void main() {
  // 实例化Person类
  Person p1 = new Person('张三', 20);
  print(p1.name);
  print(p1.age);
  p1.setInfo(30);
  p1.getInfo();
}

Dart中的命名构造函数

class Person {
  String? name; // ? 表示可空类型
  int? age; // ? 表示可空类型 不加?会报错 
  // 默认构造函数
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  // 命名构造函数
  Person.now() {
    print('我是命名构造函数');
  }
  void getInfo() {
    print('姓名:$name,年龄:$age');
    print('${this.name}----${this.age}');
  }
  void setInfo(int age) {
    this.age = age;
  }
}
void main() {
  // 实例化Person类
  Person p1 = new Person('张三', 20);
  print(p1.name);
  print(p1.age);
  p1.setInfo(30);
  p1.getInfo();
  // 调用命名构造函数
  Person p2 = new Person.now();
}

私有属性和私有方法

  1. Dart和其他面向对象语言不一样,Dart中没有public、private、protected这些访问修饰符但是我们可以使用_把一个属性或者方法定义成私有
  2. 私有方法,私有属性只能在当前类中使用,子类不能使用
// 私有属性和私有方法 要新建一个文件才能生效 不能在同一个文件中 
// 私有属性和私有方法只能在当前类中使用,子类不能使用 可以使用公有属性和方法来调用
class Animal {
  String _name = '小狗';
  int age = 20;
  void _run() {
    print('这是一个私有方法');
  }
  void execRun() {
    this._run();
  }
}
void main() {
  Animal a = new Animal();
  print(a.age);
  a.execRun();

}

Dart类中的getter和setter修饰符

  1. Dart中的getter和setter修饰符,我们可以通过它来设置属性的值和取属性的值
  2. Dart中设置属性的值和取属性的值的时候,我们可以添加逻辑操作
  3. 使用getter和setter修饰符的时候,属性名不能和方法名相同

class Rect {
  num? height;
  num? width;
  Rect(this.height, this.width);
  // 求面积
  get area {
    return this.height! * this.width!;
  }
  // 设置宽度
  set setWidth(value) {
    this.width = value;
  }
  // 设置高度
  set setHeight(value) {
    this.height = value;
  }
}
void main() {
  Rect r = new Rect(10, 4);
  print(r.area);
  r.setWidth = 6;
  r.setHeight = 8;
  print(r.area);
}

Dart中的初始化列表

  1. 初始化列表会在构造方法体执行之前执行
  2. 使用逗号分隔初始化表达式
class Rect {
   num height;
   num width;
   Rect(): height = 2, width = 3 {
      print('${this.height}----${this.width}');
   }
   // 求面积
   get area {
      return this.height * this.width;
   }
}
void main() {
   Rect r = new Rect();
   print(r.area);
}

results matching ""

    No results matching ""