oop
大约 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('保存成功');
}
}
