Dart 知识点 - 面向对象基础

网友投稿 254 2022-08-31

Dart 知识点 - 面向对象基础

面向对象是一种重要的编程思想。比如你需要指明 ​​Jimmy​​​ 在说话,那么你先得从人这个类中实例化 ​​Jimmy​​ 出来:

void main() { var person = new Person(); person.sayHi('Jimmy');}class Person { sayHi(String name) { print(name + ' is speaking...'); // Jimmy is speaking... }}

推荐使用线上编辑器 ​​dartpad.cn​​ 进行学习,测试~

​​Dart​​ 是一门面向对象的编程语言,具备类和基于混入的继承。所有的类都派生自 ​​Object​​。

面向对象基本特征

讨论面向对象,了解它们的特征,很重要。这也是面试过程中,面试官喜欢考察的一个知识点。

封装

封装就是把内部的实现隐藏起来,然后只是暴露必要的方法让外部调用。​​暴露的方法我们称之为接口​​。

还是拿刚才的示例来说明:

class Person { sayHi(String name) { print(name + ' is speaking...'); // Jimmy is speaking... }}

这里我知识暴露出了一个 ​​sayHi​​ 的方法,你不需要管里面是怎么实现的,实现有多简单或者多复杂,你只要按照要求调用这个接口就行了,比如:

/** 调用 sayHi 接口* @Function sayHi* @param name* @return void*/

继承

所谓的继承,就是使得子类具有父类等的各种公开的方法和属性。比如:

// 父类继承void main() { var dog = new Dog('Tom'); dog.sleep(); // Tom must go to sleep.}class Animal { String name; Animal(this.name); sleep() { print(this.name + ' must go to sleep.'); }}class Dog extends Animal { Dog(String name) : super(name); barking() { print('Dog is barking.'); }}

多态

多态可以理解为​​相同的行为,不同的实现方式​​​。比如:狗生活 ​​live​​​ 在陆地上,鱼儿生活 ​​live​​ 在水里,如下:

void main() { var dog = new Dog(); var fish = new Fish(); dog.live(); // Jimmy living on land. fish.live(); // Tom living in water.}// 定义一个抽象类abstract class Animal { late String name; live(); // 生存}class Dog extends Animal { @override String name = 'Jimmy'; @override live() { print(this.name + ' living on land.'); }}class Fish extends Animal { @override String name = 'Tom'; @override live() { print(this.name + ' living in water.'); }}

抽象

我们一般说面向对象的三个特征:封装,继承和多态。抽象也是面向对象的一个本质特征。比如我们上面举的多态的例子中,我们可以找到 ​​Dog​​​ 和 ​​Fish​​ 的共性,并将他们抽象出来表示。

// 定义一个抽象类abstract class Animal { late String name; // 名字 live(); // 生存(抽象方法) eat() { // 非抽象方法 print('Can eat.'); }}

[ abstract ] class className [extends superClassName] [implements interfaceName] [with className1, className2, ...] { // 类体}

​​abstract​​ 表示该类是抽象类,此关键字可省略,推荐加上​​extends​​​ 是继承类的关键字,​​superClassName​​ 是父类类名​​implements​​​ 是实现某个接口的关键字,​​interfaceName​​ 是接口名称​​with​​​ 是混入多个类的关键字,多个类用​​,​​ 分隔开

类构成

​​Dart​​ 中类的构成,包含:

类名成员变量成员方法构造方法

类名

成员变量

class className { // 成员变量 [static][const][final] type

​​type​​ 是成员变量的数据类型​​name​​ 是成员变量名​​[static][const][final]​​ 是成员变量的修饰符

​​static​​ 表示成员变量在类本身可以使用,在类的实例上不可用​​const​​ 用来定义常量,值不可改变​​final​​​ 表示单一赋值,赋值后不能更改​​final​​ 变量的值

⚠️ const 和 final 的区别在于:​​const​​​ 比 ​​final​​​ 更加严格。​​final​​​ 只是要求变量在初始化后值不变,但是通过 ​​final​​​ 无法在编译时(运行之前)知道这个变量的值,而 ​​const​​ 是修饰编译时的常量,从一开始就知道它的值。

成员方法

class className { // 成员方法 [static][type] methodName(paramType: paramName, ...) [async] { // 方法体 }}

​​type​​ 表示函数方法返回值的数据类型​​methodName​​ 表示方法名​​static​​ 是方法修饰符,表示该方法只能是类本身调用,不能在实例上可用​​paramType​​​ 表示方法参数类型,​​paramName​​​ 表示方法参数名称;可以有多个参数,用​​,​​ 来分隔开​​async​​ 表示方法是异步的

构造方法

构造方法是类中的特殊的方法。在类进行初始化的时候执行,比如:

void main() { var person = new Person('Jimmy', 100); person.sayHi(); // Hello Jimmy.}class Person { String name = ''; double height = 0.0; // 构造函数 Person(this.name, this.height); sayHi() { print('Hello ' + this.name + '.'); }}

关于构造函数,后面会有文章详细介绍...

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:嵌套块元素外边距塌陷问题解决方法
下一篇:公关界的007:这支品牌片里,有“新发现”!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~