当前位置: 首页 > 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.dtcms.com/a/312642.html

相关文章:

  • WebMvc自动配置流程讲解
  • 【MySQL】MySQL的安全风险与安装安全风险
  • GraphRAG:基于知识图谱的检索增强生成技术解析
  • OSPF HCIP
  • RAG 中常见的文本分块(chunk)方法及实战代码示例
  • 基于开源AI智能客服、AI智能名片与S2B2C商城小程序的餐饮行业私域流量运营策略研究
  • JavaEE初阶第十三期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十一)
  • 最新Android Studio汉化教程--兼容插件包
  • 日产轩逸全面评测:可靠性高十万公里无大修,科技配置落后
  • Starrocks ShortCircuit短路径的调度
  • c++类和对象(0基础也能懂)
  • ThinkPHP8学习篇(一):安装与配置
  • 力扣 hot100 Day64
  • Unity_数据持久化_XML序列化与反序列化
  • 设计模式学习[17]---组合模式
  • Android 之 RxJava2
  • 电商系统定制开发流程:ZKmall开源商城需求分析到上线全程可控
  • Node.js (Express) + MySQL + Redis构建项目流程
  • C++ 入门基础(3)
  • 从零开始学Express,理解服务器,路由于中间件
  • Ubuntu20.04 Carla安装与和Ros联合仿真
  • OpenCV轻松入门_面向python(第一章OpenCV入门)
  • Kafka——怎么重设消费者组位移?
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十六天
  • 「iOS」————属性关键字底层原理
  • Jupyter Notebook 中高效处理和实时展示来自 OpenCV 和 Pillow 的图像数据探究
  • 网络缓冲区的设计以及C++实现
  • 【Python练习】075. 编写一个函数,实现简单的语音识别功能
  • 项目日记---高并发内存池整体框架
  • 人工智能与医疗健康:AI 助力医疗的新格局