Dart面向对象编程一基础篇

33次阅读

共计 3804 个字符,预计需要花费 10 分钟才能阅读完成。

6- 2 类与对象

主文件

// 引入库(dart 文件)import 'calss_and_obj2.dart';

void main() {
  // 创建一个对象
  var getp = new p();
// 赋值 写入类中的属性的值
  getp.name = 'tom';
  getp.age = 20;
// 获取值 读类中的属性
  print(getp.name);
// 读类中的方法
  getp.work();
  print(getp.address);
}

引入文件

// 声明一个类
class p {
  // 加下划线代表私有的 只在当前 dart 文件中可以调用 外链的 dart 文件不可见
  // 属性和方法也可加下划线表示私有
// class _p{
  String name;
  int age;
// final 定义的 只能读不能写
  final String address = 'aaaa';
// 声明方法
  void work() {print('name is $name,age=$age,he is working');
  }
}

6- 3 计算属性

// void main(){//   var rect=new Rctangle();
//   rect.height=20;
//   rect.width=10;
//   print(rect.area());
// }
// class Rctangle{
//   num width,height;
//   num area(){
//     return width * height;
//   }
// }
void main() {var rect = new Rctangle();
  rect.height = 20;
  rect.width = 10;
  print(rect.area);
  rect.area = 200;
  print(rect.width);
}

class Rctangle {
  num width, height;
  // 计算属性 get 获取值 也可以 set
  num get area {return width * height;}

  set area(value) {width = value / 20;}
}

6- 4 构造方法

void main() {// var person=new Person('Tom',30,'male');
  var person = new Person('Tom', 30);
  var person1 = new Person.getn('Tom1');
  person.name = 'topm';
  person.age = 20;
  print(person.name);
  print(person.age);
  print(person1.name);
  // print(person.gender);
}

class Person {
  String name;
  int age;
  // 构造方法 如果有自定义的构造方法 那么默认的是不要的
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
// final String gender;
// 语法糖 这种方法可以 给 final 变量赋值
// Person(this.name,this.age,this.gender);
// 有名字的构造方法
  Person.getn(this.name);
  void work() {print('working');
  }
}

6- 5 常量构造方法

// 常量构造方法
void main() {const person = const Person('Tom', 30);
  print(person.name);
}

class Person {
  final String name;
  final int age;
  // 构造方法 如果有自定义的构造方法 那么默认的是不要的
  const Person(this.name, this.age);
// final String gender;
// 语法糖 这种方法可以 给 final 变量赋值
// Person(this.name,this.age,this.gender);
// 有名字的构造方法
  // Person.getn(this.name);
  void work() {print('working');
  }
}

6- 6 工厂构造方法

class Logger {
  final String name;
  // Map<String, Logger> 泛型 来限制 key value 的类型
  static final Map<String, Logger> _cache = <String, Logger>{};
  // 工厂构造方法 可以返回对象
  factory Logger(String name) {if (_cache.containsKey(name)) {return _cache[name];
    } else {final logger = Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }
  // 构造方法是不能有返回值的
  Logger._internal(this.name);

  void log(String msg) {print(msg);
  }
}

6- 7 初始化列表

// 常量构造方法
void main() {var a = {'name': '1', 'age': 2, 'gender': '3'};
  var person = new Person.withmap(a);
  print(person.name);
}

class Person {
  String name;
  int age;
  final String gender;
  Person(this.name, this.age, this.gender);
// 列表构造方法 执行时间 在构造方法前面 可以对 final 属性赋值
  Person.withmap(Map map) : gender = map['gender'] {this.name = map["name"];
    this.age = map['age'];
  }
  void work() {print('working');
  }
}

6- 8 静态成员

1 非静态的方法可以访问静态属性
2 静态方法不能使用实例化对象来访问 只能通过类名加方法名访问
3 在类中声明常量 static const int age=10;

6- 9 对象操作符

import 'constructors.dart';

void main() {// Person person=new Person();
// 条件运算符 解决空指针问题
// 对象不为空 执行
// person?.work();
// var person;
// person='';
// person=new Person();
// person.work();
// 把对象转换成 xx 类型 强转
// (person as Person).work();
// 判断对象是否为 Person 对象类型
// if(person is Person){//   person.work();
// }
// 判断对象不是 Person 对象类型
// else if(person is! Person){// print('11111');
// }
  var person = new Person();
// person.name='aa';
// person.age=30;
// 级联操作
  person
    ..name = 'aa'
    ..age = 30;
  print(person.name);
}

class Person {
  String name;
  int age;
  void work() {print('working');
  }
}

6-10 对象 call 方法

void main() {var person = new Person();
// person.name='aa';
// person.age=30;
//   print(person.name);
// name is null
// 执行类中的 call 方法
  person('gggggg');
}

class Person {
  String name;
  int age;
  void work() {print('working');
  }

  // 也可以写成有返回值的 名称必须为 call
  void call(String name) {print('name is $name');
  }
}

正文完
 0