抽象类是对本质相同内容类定义一个标准.有相同本质要实现不同功能的子类可以继承这个类,需要实现其中定义的抽象方法
abstract
关键字定义抽象类
举个例子
Result 是一个抽象类, success(); 和 error()是其中的两个方法.子类中需要将这两个抽象方法重写.
抽象类也可有普通方法,所有人相同的公用方法.
定义使用父类的类型,用子类创建实例,就可以使用对应实例里的方法.
(可用与传参接受不同的参数)
void main(List<String> args) {
RequestResult req = RequestResult(200, 'success', '成功', [1, 2]);
req.fetch();
req.error();
req.success();
UpdateResult upd = UpdateResult(500, 'error', '失败');
upd.error();
upd.success();
// 多态
// 定义使用父类的类型,用子类创建实例,就可以使用对应实例里的方法.
// 可用与传参接受不同的参数
Result resq = RequestResult(500, 'error', '失败', [3]);
resq.success();
}
// 抽象类
// 对请求 更新 的结果坐不同的处理
abstract class Result {
// 类似于制定一个本质相同类的标准
// 本质功能相同但是有差异的内容需要继承这个类,实现抽象方法。
int code = 200;
String type = 'success';
String msg = '请求成功'; //
Result(this.code, this.type, this.msg);
// 普通方法(公用的)
fetch() {
// 同样的接受参数
print('fetch');
}
// 抽象方法需要子类自行实现
// 根据成功和失败需要实现不同的返回方法
success();
// error 对不同code 的处理
error();
}
class RequestResult extends Result {
List data = [];
RequestResult(int code, String type, String msg, this.data)
: super(code, type, msg);
@override
error() {
print('$code 请求失败.');
}
@override
success() {
print('$code 请求成功. $data');
}
}
class UpdateResult extends Result {
UpdateResult(
int code,
String type,
String msg,
) : super(code, type, msg);
@override
error() {
print('$code 更新失败.');
}
@override
success() {
print('$code 更新成功');
}
}
抽象类中可以写一些普通方法,接口中的内容全部都是抽象的内容.不会有普通方法
使用 implements
关键字,意味着实现对应的类,需要将里面所有的方法实现.
implements 可以一次实现多个类.
class Upload implements Result,A,B{}
class Upload implements Result {
@override
int code;
@override
String msg;
@override
String type;
@override
error() {}
@override
fetch() {}
@override
success() {}
}
mixin
关键字可以将类定义成可混入的类,其他类混入后可以使用其中的方法
with
后加混入类.
class C with A,B{}
混入类不可以有构造函数 混入类不可以继承其他类 如果混入了两个类里有相同 方法,后来居上原则.调用方法调用的是后引入类的方法. 可以对混入的类中的方法进行重写
void main(List<String> args) {
C c = C();
c.a();
print(c is A);// true
}
mixin class A {
a() {
print('a');
}
}
mixin class B {
b() {}
}
class C with A, B {}
(ps:基本上不会独立存在)
函数的返回类型,或者参数类型在调用函数的时候传入,更加灵活使用
void main(List<String> args) {
List<String> list = ['23', '32'];
print(getValue<String>('EW'));
print(getValue<int>(2));
}
T getValue<T>(T value) {
return value;
}
泛型类定义类的类型。在创建实例的时候传入。
void main(List<String> args) {
// 创建实例时传入类型
Document<String> docs = Document({'title': 'title', 'content': 'content'});
docs.setDocumet('editor', 'lisi');
print(docs.getDocument('editor'));
Document<List<String>> docs2 = Document({
'title': ['title']
});
docs2.setDocumet('editor', ['lisi']);
print(docs2.getDocument('editor'));
}
// 这里T是传入的类型。根据传入的T 来决定Map value 值的类型。
class Document<T> {
Map<String, T> doc = {};
Document(this.doc);
setDocumet(String key, T value) {
doc[key] = value;
}
T? getDocument(String key) {
return doc[key];
}
}
如果要实现一个类,传入类型后可以调用 Document 中的 getDocument 等方法,可以用泛型限定 传入的数据类型
void main(List<String> args) {
List<String> list = ['23', '32'];
print(getValue<String>('EW'));
print(getValue<int>(2));
Document<String> docs = Document({'title': 'title', 'content': 'content'});
docs.setDocumet('editor', 'lisi');
print(docs.getDocument('editor'));
// var mark = Markdown(docs);
// mark.init();
Markdown<Document<String>> mark = Markdown(docs);
mark.init();
}
// 复用上面的Document类
class Document<T> {
Map<String, T> doc = {};
Document(this.doc);
setDocumet(String key, T value) {
doc[key] = value;
}
T? getDocument(String key) {
return doc[key];
}
}
// 指定传入的类型需要时 Document<String>的实例
// 其中String 不可以用T 替换。否则创建实例会报错
class Markdown<T extends Document<String>> {
T docs;
Markdown(this.docs);
init() {
print(docs.getDocument('title'));
}
}
只是在定义抽象类的时候在后面加上<T>
传入类型,在继承抽象类是也需要 使用泛型
abstract class Catch<T> {
T? getCatch(String key);
setCatch(String key, T value);
}
class MameryCatch<T> extends Catch<T> {
@override
T? getCatch(String key) {
return null;
}
@override
setCatch(String key, T value) {
print('set');
}
}
可以直接创建一个 dart 文件,写好内容
import '/xxx.dart
导入里面全部内容。
如果想指定方法导入 可是使用 show
import '/xxx.dart show A,B
指定某些内容不导入 用 hide 来指定不导入某些内容
import '/xxx.dart hide A,B
dart:io
dart:convert
这里就是 dart 的内置库,提供了不同的方法。
查询的话 可以 使用 pub.dev 可以查询对应的三方库内容。
pubspec.yaml
name: 'app'
environment:
sdk: '^3.2.0'
dart pub add
加库名称来安装库如 dart pub add dio
后根据官方文档的示例来使用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。