1. class Person {
  2. String name = 'lynn';
  3. int age = 20;
  4. String getUserName(){
  5. print('获取用户名称 --- $name');
  6. return name;
  7. }
  8. void setUserAge(int age){
  9. print('设置用户年龄 --- $age');
  10. this.age = age;
  11. }
  12. }
  13. void main() {
  14. Person person = new Person();
  15. // 可以直接访问 类的属性
  16. print(person.name);
  17. person.getUserName(); // 调用类的方法
  18. person.setUserAge(18);
  19. print(person.age);
  20. }

类的默认构造函数

  1. // 默认构造函数 , 构造函数是在实例化类的时候,自动调用的。
  2. // 注意 : 默认构造函数只有一个
  3. class Person {
  4. String sex = '';
  5. // 构造函数
  6. Person(String sex) {
  7. this.sex = sex;
  8. }
  9. // Person(String this.sex) 简写默认构造函数
  10. }
  11. void main() {
  12. Person person = new Person('男');
  13. print(person.sex);
  14. }

类的命名构造函数

  1. // 命名构造函数, 允许有多个
  2. class Person {
  3. String name = 'lynn';
  4. Person.get(String this.name); // 命名构造函数
  5. }
  6. void main() {
  7. Person person = new Person.get('xing');
  8. print(person.name);
  9. }

类的私有方法以及私有属性

  1. // dart 中没有 public private protected 这些访问修饰符
  2. // 但是在 dart 中 我们可以是用 _ 把一个属性或者方法定义成私有的, 但是注意, 这个类必须抽离成单个dart 文件。
  3. // Person.dart
  4. class Person {
  5. String name = 'lynn';
  6. int _age = 20;
  7. Person.get(String this.name);
  8. // 因为 age 定义成私有属性, 所以无法通过实例访问, 但是可以定义一个方法 提供给外部使用
  9. int getAge(){
  10. return _age;
  11. }
  12. // 私有方法
  13. String _getSex(){
  14. return _sex;
  15. }
  16. }
  17. // index.dart
  18. import 'lib/Person.dart';
  19. void main() {
  20. Person person = new Person.get('xing');
  21. print(person.name);
  22. // print(person._age); // 无法访问私有属性
  23. print(person.getAge()); // 通过公有方法 访问 私有属性
  24. // print(person._getSex()); // 私有方法不可以调用
  25. }

类的 get and set 修饰符

  1. // Person.dart
  2. class Person {
  3. String name = 'lynn';
  4. int _age = 20;
  5. String _sex = '男';
  6. Person.get(String this.name);
  7. // get 修饰符
  8. get getAge{
  9. return _age;
  10. }
  11. // set 修饰符
  12. set setSex(String val){
  13. this._sex = val;
  14. }
  15. }
  16. // index.dart
  17. import 'lib/Person.dart';
  18. void main() {
  19. Person person = new Person.get('xing');
  20. print(person.getAge);
  21. print(person.setSex = '帅');
  22. }

构造函数之前初始化实例变量

  1. class Person {
  2. String name;
  3. int age;
  4. Person():name = 'lynn', age = 20; // 构造函数调用之前初始化属性值
  5. }

类的静态成员以及方法

  1. // static 关键字表示该属性为 静态属性或者方法,静态的属性跟方法是不需要实例化就可以进行访问的。
  2. class Person {
  3. static String name = 'lynn';
  4. static int age = 20;
  5. }
  6. // index.dart
  7. import 'lib/Person.dart';
  8. void main() {
  9. print(Person.name); // 可以直接访问
  10. print(Person.age);
  11. }
  12. // 注意: 静态方法以及属性 不需要实例化。
  13. class Person {
  14. static String name = 'lynn';
  15. static int age = 20;
  16. static String sex = '男';
  17. int money = 100000;
  18. // 注意 , 静态方法不允许访问 非静态的成员以及方法但是可以访问静态的方法以及成员, 相反 非静态的方法, 允许访问静态成员以及方法
  19. static getSex(){
  20. return sex;
  21. }
  22. setName(String name, int money){
  23. name = name; // 注意, 静态成员不能够通过实例访问,也就是不需要使用 this ,而是直接使用即可。
  24. this.money = money; // 非静态成员使用 this 访问
  25. print('name: $name --------- money: ${this.money}');
  26. }
  27. }

对象 ? 条件操作符

  1. import 'lib/Person.dart';
  2. void main() {
  3. Person? person;
  4. person?.printUserInfo();
  5. }
  6. // Person.dart
  7. class Person {
  8. String? name;
  9. int? age;
  10. Person(String name, int age);
  11. void printUserInfo(){
  12. print('Person name: $name ------年龄: $age');
  13. }
  14. }

对象 is 类型判断操作符

  1. import 'lib/Person.dart';
  2. void main() {
  3. Person person = new Person('lynn', 20);
  4. // is 类型判断, 判断person 是否属于 Person 类
  5. if(person is Person) {
  6. print('person is Person');
  7. }
  8. }
  9. // Person.dart
  10. class Person {
  11. String? name;
  12. int? age;
  13. Person(String this.name, int this.age);
  14. void printUserInfo(){
  15. print('Person name: $name ------年龄: $age');
  16. }
  17. }

对象 as 类型转换操作符

  1. import 'lib/Person.dart';
  2. void main() {
  3. var cat;
  4. cat = '';
  5. cat = new Person('lynn', 20);
  6. (cat as Person).printUserInfo(); // 把cat 变量的类型 转换成 Person, 在新版的dart 中, 可以不使用as也可以打印
  7. }

对象 .. 级联操作符

  1. import 'lib/Person.dart';
  2. void main() {
  3. Person person = new Person('lynn', 20);
  4. // 级联操作符
  5. person..name = 'xing'
  6. ..age = 28
  7. ..printUserInfo();
  8. }