当前位置: 首页 > news >正文

Flutter Dart类的使用

类的定义

class 类名{属性的定义;.....方法的定义;......
}

示例

void main() {Dog dog = Dog();dog.eat();
}class Animal{late String name;late String height;void eat(){}
}
//继承
class Dog extends Animal{void eat() {print("撕咬");}
}//继承
class Fish extends Animal{void eat() {//多态print("吸");}
}

构造方法

(1)默认构造方法

//无需声明,就能调用
Dog dog = Dog();class Dog {void eat() {print("撕咬");}
}

(2)类名构造方法

void main() {Animal animal = Animal("L", "80");
}class Animal {late String name;late String height;Animal(String name, String height) {this.name = name;this.height = height;}void eat() {}
}

(3)命名构造方法

class 类名{类名.标识名(参数){}
}
void main() {Animal animal2 = Animal.create("A");
}class Animal {late String name;late String height;Animal.create(String n) {name = n;}void eat() {}
}

存储器和访问器

Dart语言中使用set关键字定义存储器,使用get关键字定义访问器。
一般不建议使用,能看懂就行。一般情况就直接使用。

	set 属性名(参数){}
返回值类型 get 属性名{return 返回值;
}
void main() {Animal animal2 = Animal();animal2.setName = "1111";print(animal2.mName);
}class Animal {late String name;late String height;set setName(String name) {this.name = name;}get mName {return name;}
}

继承的定义

使用extends关键字继承一个类,子类会继承父类可见的属性和方法。不会继承构造方法。
只能有一个父类。

	class 子类名 extends 父类名{}

示例

class Shape {late String name;void show() {print(name);}
}class Circle extends Shape {late double r;double area() {return 3.14 * r * r;}
}

重写子类方法

void main() {Circle circle = Circle();circle.name = "圆";circle.r = 2;circle.show();circle.showArea();
}class Shape {late String name;void show() {print(name);}void showArea(){print("面积");}
}class Circle extends Shape {late double r;double area() {return 3.14 * r * r;}void showArea(){//重写print("面积" + area().toString());}
}I/flutter ( 2416): 圆
I/flutter ( 2416): 面积12.56

多态

多态是指同一行为作用于不同对象时,可以表现出多种不同的形式和结果来。

void main() {Dog dog = Dog();dog.name = "小黑";dog.call();Car car = Car();car.name = "咪咪";car.call();
}class Animal{late String name;void  call(){}
}class Dog extends Animal{void  call(){print("小狗$name叫:汪汪");}
}class Car extends Animal{void  call(){print("小猫$name叫:喵喵");}
}I/flutter ( 2416): 小狗小黑叫:汪汪
I/flutter ( 2416): 小猫咪咪叫:喵喵

构造方法的调用

如果父类中有无参构造方法,则子类的构造方法会默认调用父类的无参构造方法。

void main() {Dog dog = Dog();dog.name = "小黑";dog.call();
}class Animal {late String name;Animal() {print("Animal");}void call() {}
}class Dog extends Animal {void call() {print("小狗$name叫:汪汪");}Dog(){print("Dog");}
}I/flutter ( 2416): Animal
I/flutter ( 2416): Dog
I/flutter ( 2416): 小狗小黑叫:汪汪

如果父类没有无参构造方法,则需要在构造方法参数后使用“:”显式调用父类的自定义构造方法。

void main() {Dog dog = Dog();dog.name = "小黑";dog.call();
}class Animal {late String name;Animal(var s) {print("Animal____$s");}void call() {}
}class Dog extends Animal {void call() {print("小狗$name叫:汪汪");}Dog() : super("aaa"){print("Dog");}
}I/flutter ( 2416): Animal____aaa
I/flutter ( 2416): Dog
I/flutter ( 2416): 小狗小黑叫:汪汪

如果类中的一个构造方法调用类中的其他构造方法,则这种构造方法称之为重定向构造方法。

void main() {Animal animal = Animal("鸡", 2);print(animal.name);Animal dog = Animal.proDog(4);print(dog.name);print(dog.legs);
}class Animal {late String name;late int legs;Animal(this.name, this.legs);Animal.proDog(int legs) : this("Dog", legs);void call() {}
}I/flutter ( 2416): 鸡
I/flutter ( 2416): Dog
I/flutter ( 2416): 4

抽象类

	abstract class 类名{}

示例

abstract class Animal {void go();//没有方法体
}class Dog extends Animal{void go() {print("在路上跑");}
}class bird extends Animal{void go() {print("在天上飞");}
}

接口

dart中没有interface,直接使用抽象类作为接口。


abstract class Animal {void go() ;
}class Sparrow implements Animal{void go() {// TODO: implement go}
}

混入

能够将一个或者多个父类的功能添加到子类中,而无需继承这些父类。

void main() {FeiShu feiShu = FeiShu();feiShu.go();
}
//dart版本至少3.0
mixin class Dog {void go() {print("在路上跑");}
}mixin class Bird {void go() {print("在天上飞");}
}class FeiShu extends Dog  with  Bird{}
//等同
/*class FeiShu with Dog,Bird{}*/I/flutter ( 2416): 在天上飞

泛型

	class 类名<T>{T t;}

示例

void main() {Info<int> info1 = Info(10);info1.printInfo();
}class Info<T>{T value;Info(this.value);void printInfo(){print("$value is $T");}
}I/flutter ( 2416): 10 is int

泛型接口

class MySQL {}class MsSql {}class MoSql {}void main() {DB<MySQL> mySql = DB();DB<MoSql> moDB = DB();
}abstract class OperateDB<T> {//接口late T currentRecords;T getRecord(int index);bool insertRecord(int index, T mySql);
}class DB<T> implements OperateDB<T> {DB() {print("正在使用的是$T 类型的数据库");}late T currentRecords;T getRecord(int index) {// TODO: implement getRecordthrow UnimplementedError();}bool insertRecord(int index, T mySql) {// TODO: implement insertRecordthrow UnimplementedError();}
}

泛型方法

返回类型 方法名<类型参数>(参数列表) {// 方法体
}

void main() {List<int> intList = [1, 2, 3, 4, 5, 6, 7];PrintList printList = PrintList();printList.show(intList);
}
//定义一个可以显示数组元素的泛型方法,并且数组元素可以是任何类型的数据。
class PrintList {void show<T>(List<T> name) {for (var element in name) {print(element);}}
}I/flutter (19868): 1
I/flutter (19868): 2
I/flutter (19868): 3
I/flutter (19868): 4
I/flutter (19868): 5
I/flutter (19868): 6
I/flutter (19868): 7
http://www.lryc.cn/news/609217.html

相关文章:

  • Redisson高并发实战:守护Netty IO线程的关键指南
  • 一加Ace5无法连接ColorOS助手解决(安卓设备ADB模式无法连接)
  • 【MySQL】MySQL 中的数据排序是怎么实现的?
  • FreeRTOS源码分析三:列表数据结构
  • 深度学习-读写模型网络文件
  • 03.一键编译安装Redis脚本
  • 07.config 命令实现动态修改配置和慢查询
  • ThinkPHP8.x控制器和模型的使用方法
  • VUE-第二季-01
  • 【实习总结】Qt通过Qt Linguist(语言家)实现多语言支持
  • Python-初学openCV——图像预处理(六)
  • 机器学习之决策树(二)
  • solidworks打开step报【警告!可用的窗口资源极低】的解决方法
  • 《C 语言内存函数深度剖析:从原理到实战(memcpy/memmove/memset/memcmp 全解析)》
  • 使用ACK Serverless容器化部署大语言模型FastChat
  • 【十九、Javaweb-day19-Linux概述】
  • 我的世界模组进阶教程——伤害(1)
  • 每日面试题20:spring和spring boot的区别
  • Linux 文件与目录操作命令宝典
  • Unity_数据持久化_IXmlSerializable接口
  • 【视频内容创作】PR的关键帧动画
  • SQL157 更新记录(一)
  • linux下jvm之jstack的使用
  • 代码随想录day53图论4
  • Java 大视界 -- Java 大数据在智能教育学习资源个性化推荐与学习路径动态调整中的深度应用(378)
  • 【LLM】 BaseModel的作用
  • 【0基础PS】PS工具详解--文字工具
  • Shell脚本-变量是什么
  • 思途JSP学习 0802(项目完整流程)
  • Linux网络编程 --- 多路转接select