Dart学习笔记(十)

43 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Dart 创建自定义类使用类

Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类

// 定义一个类
 
class Person {
 
  String name = "张三";
 
  int age = 23;
 
  void getInfo() {
 
    // 写法一
 
    print("$name ------ $age");
 
    // 写法二
 
    print("${this.name} --- ${this.age}");
 
  }
 
  void setInfo(int age) {
 
    this.age = age;
 
  }
 
}
 
void main() {
 
  // 实例化
 
  // 写法一
 
   var p1 = new Person();
 
   print(p1.name); // 张三
 
   p1.getInfo(); // 张三 ------ 23 张三 --- 23
 
  // 写法二
 
  Person p2 = new Person();
 
  print(p2.name); // 张三
  
 
  p1.setInfo(28);
 
  p1.getInfo(); // 张三 ------ 28 张三 --- 28
}

Dart 自定义类的默认构造函数

指定参数

 class Person {
 
   String name = "张三";
 
   int age = 20;
 
   // 构造函数
 
   Person() {
 
     print("这是构造函数里的内容 这个方法在实例化的时候触发");
 
   }
 
   void printInfo() {
 
     print("${this.name}------${this.age}");
 
   }
 
 }
 
 void main() {
 
   Person p1 = new Person(); // 这是构造函数里的内容 这个方法在实例化的时候触发
 
 }

自定义参数

最新版本的dart中需要初始化不可为 null 的实例字段

如果不初始化的话需要在属性前面加上 late

class Person {
 
  late String name;
 
  late int age;
 
 
   // 默认构造函数 等同于下面简写
 
   // Person(String name, int age) {
 
   //  this.name = name;
 
   //  this.age = age;
 
   // }
 
 
  // 默认构造函数简写
 
  Person(this.name, this.age);
 
  void printInfo() {
 
    print("${this.name} --- ${this.age}");
 
  }
 
}
 
 
void main() {
 
  Person p1 = new Person('张三', 20);
 
  p1.printInfo(); // 张三 --- 20
 
 
 
  Person p2 = new Person('李四', 25);
 
  p2.printInfo(); // 李四 --- 25
 
}

Dart 自定义类的命名构造函数

构造函数可以写多个

class Person {
 
  late String name;
 
  late int age;
 
  // 默认构造函数简写 只能定义一个
 
  Person(this.name, this.age);
 
  // 命名构造函数 可以定义多个
 
  Person.now() {
 
    print('我是命名构造函数');
 
  }
 
  Person.setInfo(String name, int age) {
 
    this.name = name;
 
    this.age = age;
 
  }
 
  void printInfo() {
 
    print("${this.name} --- ${this.age}");
 
  }
 
}
 
void main() {
 
  // DateTime是一个类 now是它的命名
 
  var d = new DateTime.now(); // 实例化DateTime调用它的命名构造函数
 
  print(d);
 
 
  // 调用默认构造函数 默认实例化类的时候调用的是 默认构造函数
  Person p1 = new Person('张三', 20); 
 
 
  // 默认实例化类的时候调用的是 命名构造函数
  Person p2 = new Person.now(); 
 
 
 
  Person p3 = new Person.setInfo('李四', 30);
 
  p3.printInfo();
 
}