Flutter -> dart 结束 (抽象类和接口)

dart 类 -> 抽象类

  • dart 抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。

  • 抽象类通过abstract 关键字来定义。

  • 抽象类不可以被实例化,只有继承他的子类可以。

  • 子类继承抽象类必须实现里面的抽象方法。

  • 抽象类作为接口,必须实现抽象类里面的所有属性和方法。

  • 多态就是父类定义一个属性或者方法,父类不去实现,让子类去实现,这就叫多态。

  • 举个例子(抽象类/多态)

/** 定义一个Animal 类要求它的子类必须包含eat方法 */

abstract class Animal {
  eat(); //抽象方法   子类中必须实现
  printInfo(){
    print('我是一个抽象类中的普通方法');
  }
}

class Dog extends Animal {
  @override   //覆写抽象父类的方法
  eat(){
    print('小狗在吃骨头');
  }
}

class Cat extends Animal {
  @override
  eat(){
    print('小猫在吃🐟');
  }
}

main(){
  Dog d = new Dog();
  d.eat();   //小狗在吃骨头
  d.printInfo();   //我是一个抽象类中的普通方法

  Cat c = new Cat();
  c.eat();   //小猫在吃🐟
}

dart 类 -> 接口

  • 建议使用抽象类定义接口
  • 定义一个DB库,支持 mysql mssql mongodb
  • 三个类里面有同样的方法
  • 举个例子
/** 定义一个DB 接口,支持mysql mssql mongodb */

// 接口: 接口就是约定,规范
abstract class Db {
  String url; //数据库的链接地址
  add();
  // save();
  // delete():
}

class Mysql implements Db {
  @override
  String url;
  @override
  add() {
    print('mysql add');
  }
}

class Mssql implements Db {
  @override
  String url;
  @override
  add() {
    print('mssql add');
  }
}

class Mongodb implements Db {
  @override
  String url;
  @override
  add() {
    print('mongodb add');
  }
}


main(){
  Mysql mysql = new Mysql();
  mysql.add();
}

dart 中的泛型

  • 泛型举个例子
/** 只能返回string 类型的数据 */

String getData(String value){
  return value;
}

/** 同时返回 string 类型 和 number类型 */   
//1. 不指定类型可以解决这个问题
getData(value){
  return value;
}

//缺点:放弃了类型检查


//2.使用泛型
//对传入参数和返回参数都做校验
T getData<T>(T value){
  return value;
}

//对返回参数不做校验
getData<T>(T value){
  return value;
}


main(){
  var result = getData<String>('kangjiahao');
  print(result);   //kangjiahao
}

  • 泛型类
/** 泛型类 */
/** 把下面的类换成泛型类,要求list可以增加int类型的数据,也可以增加string类型的数据 */
class PrintClass {
  List list01 = new List<int>();
  void add(int value){
    this.list01.add(value);
  }

  void printInfo(){
    for(var i = 0; i < this.list01.length; i++){
      print(this.list01[i]);
    }
  }
}

//使用泛型
class PrintClass<T> {
  List list = new List<T>();
  void add(T value) {
    this.list.add(value);
  }

  void printInfo() {
    for (var i = 0; i < this.list.length; i++) {
      print(this.list[i]);
    }
  }
}

main() {
  PrintClass p = new PrintClass<int>();
  p.add(1);
  p.add(2);

  p.printInfo(); //1  2
}

dart 中的库, 自定义库, 系统库, 第三方库

  • 在dart中,库的使用是通过import关键字来引入的。
  • library指令可以创建一个库,每个dart 文件都是一个库,即使没有library指令来指定。
  • dart中的库主要有三种。
    • 1.我们自定义的库 import ‘lib/xxx.dart’
    • 2.系统内置库
      import ‘dart.math’;
      import ‘dart.io’;
      import ‘dart:convert’;
    • 3.Pub 包中管理系统的库
      https://pub.dev/packages;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值