抽象类
- 抽象类通过abstract 关键字来定义
- 抽象类不能被实例化,只有继承它的子类可以
- 抽象类里面的抽象方法 在继承的时候必须要定义这些方法
- 如果子类继承抽象类必须得实现里面的抽象方法
- 如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。
多态
- 多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。
- 多个子类继承一个父类,每个子类的抽象方法逻辑不一样
late
延迟初始化 定义变量没有赋值的时候需要在前面加late
require
参数不能为空
import 'dart:core';
//抽象类 约束子类
/*
抽象类通过abstract 关键字来定义
抽象类不能被实例化,只有继承它的子类可以
抽象类里面的抽象方法 在继承的时候必须要定义这些方法
如果子类继承抽象类必须得实现里面的抽象方法
如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。
*/
/*多态
多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。
多个子类继承一个父类,每个子类的抽象方法逻辑不一样
*/
/*接口
dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
建议使用抽象类定义接口。
使用implements关键字进行实现
*/
/*泛型
类型校验可以传入 便于封装
*/
/*
* ?表示可空类型 ! 类型断言
* int? a=123 int?表示a为可空类型
* string? str='xxx' 表示str为可空类型
*/
/*
*late 延迟初始化 定义变量没有赋值的时候需要在前面加late
*require 参数不能为空
*/
T getData<T>(T val) {
return val;
}
//泛型类
//不指定就是任意类型
class Pwxs<T, I> {
List ary = <T>[];
List arys = <I>[];
void add(T val, I key) {
this.ary.add(val);
print('$val--$key');
}
}
abstract class Anm {
eat(); //抽象方法
run(); //抽象方法
}
class Aog extends Anm {
// @override 告诉你说下面这个方法是从父类/接口 继承过来的
@override
eat() {
print('eat Aog');
}
@override
String run() {
return 'run Aog';
}
}
class Cog extends Anm {
// @override 告诉你说下面这个方法是从父类/接口 继承过来的
@override
eat() {
print('eat Cog');
}
@override
String run() {
return 'run Cog';
}
}
//接口 定义约束定义
abstract class Db {
late String uri;
add(Map data);
update();
delete();
}
class Api implements Db {
String uri;
Api(this.uri);
@override
add(data) {
print(data);
return data;
}
@override
update() {
return 'update';
}
@override
delete() {
return 'delete';
}
}
main(List<String> args) {
Anm aog = new Aog();
aog.eat();
print(aog.run());
Anm cog = new Cog();
cog.eat();
print(cog.run());
Api api = new Api('127.0.0.1');
api.add({'a': 10});
getData<String>('xxx');
List<String> arr = ['10', '2'];
print(arr);
Pwxs cla = Pwxs<String, int>();
cla.add('xxx', 10);
print(cla.arys);
String? sw = 'zyy';
sw = null;
print(sw);
}