Dart面向对象编程(一)基础篇

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泛型 来限制key value的类型
  static final Map _cache = {};
  // 工厂构造方法 可以返回对象
  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');
  }
}

你可能感兴趣的:(dart)