文章目录一、类1、类的构造函数1.1 命名构造函数2、抽离封装类模块化3、类的私有方法和私有属性4、类中的 getter 和 setter 修饰符4.1 getter4.2 setter5、类中的初始化列表一、类1、类的构造函数1.1 命名构造函数当通过指定的命名构造函数实例化对象时会调用该命名构造函数命名构造函数可以有多个的。DateTime 的 now() 就是命名构造函数voidmain(){vardateNownewDateTime.now();print(dateNow);}classPerson{lateStringname;late int age;// 默认构造函数Person(this.name,this.age);// 命名构造函数Person.now(){print(我是命名构造函数);}voidprintInfo(){print(${this.name}---${this.age});}}voidmain(){// Person p1 new Person(Cherry, 16); // 实例化时调用默认构造函数Personp2newPerson.now();// 调用命名构造函数}2、抽离封装类模块化根目录下新建 lib 目录新建 Person.dart 文件抽离代码classPerson{lateStringname;late int age;// 默认构造函数Person(this.name,this.age);// 命名构造函数Person.now(){print(我是命名构造函数);}voidprintInfo(){print(${this.name}---${this.age});}}voidmain(){// Person p1 new Person(Cherry, 16); // 实例化时调用默认构造函数Personp2newPerson.now();// 调用命名构造函数}使用的时候通过 import 关键词引入该文件importlib/Person.dart;voidmain(){Personp1newPerson(Cherry,16);p1.printInfo();}3、类的私有方法和私有属性Java 等语言中有privatepublicprotected关键字表示属性或方法的私有性在 Dart 语言中使用下划线_表示该方法或属性为私有的。classAnimal{lateString_name;// 私有属性late int age;Animal(this._name,this.age);voidprintInfo(){print(${this._name}---${this.age});}}voidmain(){AnimalanewAnimal(Dog,3);print(a._name);print(a.age);}注意只有当类定义在其他独立的文件上时_表示私有性才是有效的若和主入口函数main()在同一个文件下私有性不会生效。新建 lib/Animal.dart 抽离代码classAnimal{lateString_name;// 私有属性late int age;Animal(this._name,this.age);voidprintInfo(){print(${this._name}---${this.age});}}importlib/Animal.dart;voidmain(){AnimalanewAnimal(Dog,3);// print(a._name); // errorThe getter _name isnt defined for the class Animal.print(a.age);}注意如果想要使用类的私有方法或私有属性可以通过类中公有方法返回私有属性。classAnimal{lateString_name;// 私有属性late int age;Animal(this._name,this.age);voidprintInfo(){print(${this._name}---${this.age});}StringgetName(){returnthis._name;}void_run(){print(这是一个私有方法);}execRun(){this._run();// 类里面方法的相互调用}}importlib/Animal.dart;voidmain(){AnimalanewAnimal(Dog,3);print(a.age);// print(a._name); // errorThe getter _name isnt defined for the class Animal.print(a.getName());// a._run(); // Error: The method _run isnt defined for the class Animal.a.execRun();// 间接调用私有方法}4、类中的 getter 和 setter 修饰符计算矩形的面积classRect{late num height;late num width;Rect(this.height,this.width);area(){returnthis.height*this.width;}}voidmain(){RectrnewRect(8,5);print(r的面积${r.area()});}4.1 getter类中使用 get 修饰的方法块使用的时候通过调用属性的方式使用。classRect{late num height;late num width;Rect(this.height,this.width);// gettergetarea{// 不加括号计算属性returnthis.height*this.width;}}voidmain(){RectrnewRect(8,5);print(r的面积${r.area});// 和调用类的属性的方式一样}4.2 setterclassRect{late num height;late num width;Rect(this.height,this.width);area(){returnthis.height*this.width;}// settersetareaHeight(value){this.heightvalue;}}voidmain(){RectrnewRect(8,5);print(r的面积${r.area()});r.areaHeight7;print(r的面积${r.area()});// 通过 “对象.属性 值” 的方式调用 set 修饰符}5、类中的初始化列表Dart 中也可以在构造函数体运行之前初始化实例变量classRect{late num height;late num width;// Rect(this.height, this.width);Rect():height8,width5{print(${this.height}---${this.width});}area(){returnthis.height*this.width;}}voidmain(){RectrnewRect();print(r.area());}