跳至主要內容

oop

chanchaw大约 1 分钟projs

可选成员属性


void main(){
  Person p = Person('张三',12);
  print(p.toString());
}

class Person {
  String? name; // 可为空的成员属性
  int? age;     // 可为空的成员属性

  Person(this.name,this.age);// 构造方法

  
  String toString(){
    return '{name:$name,age:$age}';
  }
}


工厂方法(单例)

void main(){
  Logger l1 = Logger();
  Logger l2 = Logger();
  print('l1==l2:${l1==l2}');
  l1.log('打印日志了吗');
}

/**
 * 工厂构造方法,实现 java 中的单例
 */
class Logger {
  static Logger? _cache;
  factory Logger(){
    // 如果 _cache 是空则通过调用私有方法 _internal 创建一个对象并赋值
    // 注意运算符 ??= 中间不能有空格
    _cache ??= Logger._internal();
    return _cache!;
  }
  Logger._internal();
  void log(String msg){
    print(msg);
  }
}

getter,setter


void main(){
  // 测试 getter,setter
  PurchaseDetail d = PurchaseDetail(11,'BC20050102');
  print('billCode:${d.billCode}');
  d.billCode = 'sss';
  print('修改后的billCode:${d.billCode}');
}

class PurchaseDetail{
  int? _id;
  String? _billCode;

  PurchaseDetail(int id,String billCode){
    _id = id;
    _billCode = billCode;
  }
  String? get billCode => _billCode;
  set billCode(String? value){
    _billCode = value;
  }
}

抽象类方法

void main(){
  // 测试 getter,setter
  PurchaseDetail d = PurchaseDetail(11,'BC20050102');
  print('billCode:${d.billCode}');
  d.billCode = 'sss';
  print('修改后的billCode:${d.billCode}');

  // 演示抽象类的用法
  BillPurchase b = BillPurchase();
  b.selectOne(11);

  BillRepair r = BillRepair();
  print('下面是调用BillRepair对象的方法');
  r.selectOne(12);
  r.save();
}

// 实现抽象类(实现接口)
// 必须实现抽象类中的所有方法,不管抽象类中是否有实现的代码
class BillRepair implements Bill {
  
  void save() {
    print('保存单据');
  }

  
  void selectOne(int id) {
    print('获取主键${id}的单据');
  }
}

// 继承自抽象类
class BillPurchase extends Bill {
  
  void selectOne(int id) {
    print('查询获取主键${id}的单据');
  }

}
// 抽象类,抽象方法。dart中使用抽象类实现 java 中的接口的功能
abstract class Bill{
  // 抽象方法不需要关键字 abstract
  void selectOne(int id);
  // 抽象类中也可以写有默认实现的方法
  void save(){
    print('保存成功');
  }
}