《越空Dart教程》:第七节 类

《越空Dart教程》:第七节 类

自我介绍

大家好,我是越空,一位货真价实的16岁开发者。由于最近我在学习Dart这门语言,所以我就想总结我所学到的知识,分享给大家,让大家和我一起学习这门语言,争取做到可以让大家真的也学习到东西,并且少走一些弯路,感谢大家的支持。
这是我发表的第一套教程,多多少少会有不足的地方,还请大家多多见谅,有什么问题或者建议,也可以发表评论和私信我,希望可以得到大家的支持,我会再接再厉的!
那么接下来,我们正式开始今天的学习吧!

这是一套系列课程,新来的读者请从第一节开始学习

在上一节我们已经学完了Dart中的函数。

本节课我们将学习Dart中的类,有类的使用、构造函数、私有方法和属性(类中的getter和setter修饰符的用法)、静态成员、操作符、类的继承六部分。

第一部分:类的使用

类的介绍

Dart是一门面向对象的编程语言。面向对象有三个基本特征:封装、继承、多态。Dart所有的东西都是对象,所有的对象都继承自Object类。
Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类。
一个类通常由属性和方法组成。

Data内置对象

类 Class 我们其实已经很熟悉了 ,我们常用的数据结构 List、Map类型,都属于Class。在这里插入图片描述

类的创建

注意:规范的类名以大写字母开头、方法名以小写字母开头在这里插入图片描述

类的使用

在这里插入图片描述
运行结果,在这里插入图片描述

把类单独抽离成一个模块

在我们真正写项目的时候 会有很多个类,可能几十个 几百个,或者更多,我们不可能把这所有的类全都放进一个文件里,这样项目的可维护性会非常的差、不易维护。
我们通常会把一个类或者和其相关的类抽离到单独的一个模块中,用到的时候导入一下即可。
首先我们将要抽离的类的全部代码剪贴下来,然后新建一个.dart的文件 将代码贴上去,将其保存到一个文件夹下 ,在这里插入图片描述
Student.dart的内容,
在这里插入图片描述
再在同文件夹下新建一个hello.dart文件,在hello.dart中导入Student.dart,使用Student类,在这里插入图片描述
把类单独抽离成一个模块的好处:模块化、可以实现多人开发。

第二部分:构造函数

默认构造函数

构造函数在类实例化的时候触发调用。构造函数的格式:

类名(){
方法体
}

其实,每一个类都有构造方法。在实例化它的时候都会触发调用它的构造方法,没有自定义构造方法的时候,就如下图的Student类,

在这里插入图片描述
在没有自定义构造方法的时候,它都有一个默认的构造方法。比如上图的这个Student类。完整的其实是这样的,在这里插入图片描述
在没有自定义构造函数的时候,都会有一个默认的空的构造函数,然后在实例化这个类的时候,就会触发它。

自定义默认构造函数

例子:给Student类增加一个构造函数。在这里插入图片描述
然后在main函数中去实例化它,看看运行结果,在这里插入图片描述
既然是函数 当然就可以有参数 在触发调用的时候去传入参数。之前getInfo和setInfo函数的功能 就都可以使用构造函数实现了,如下,在这里插入图片描述
实例化调用时传入参数,运行结果,在这里插入图片描述
定义构造函数的时候,可以这样简写,在这里插入图片描述
这样写 就直接将参数赋值给类中的this属性,就不用一行一行的去写赋值语句了。如果不要下面的输出,只是实现设置属性的功能的话,还可以简写成这样,在这里插入图片描述
就一行语句。

命名构造函数

一个类只能有一个默认构造函数,但是却可以有无数个命名构造函数,命名构造函数就是使用名字去触发调用的构造函数。
命名构造函数的格式:

类名.命名{
方法体
}

在这里插入图片描述
实例化,运行结果,在这里插入图片描述

构造函数体运行前初始化列表

可以在构造函数体运行前去初始化属性。在这里插入图片描述

第三部分:私有方法和属性

私有方法和属性

Dart和其他面向对象语言不一样,Data中没有 public private protected这些访问修饰符合。
Dart中可以使用_来将类中的方法或者属性设置为私有。
不加_的方法和属性默认是公开的,也就是外部可以访问的,例如Person类中有一个getInfo方法,在外部将Person实例化 是可以使用getInfo方法的,可是如果将getInfo设置成私有方法,在外部就是无法访问的了,只能在内部自己进行使用。
这个外部的定义是当前这个.dart文件之外的文件,如果是在同一个文件下,就算将属性或者方法设置为私有,在其他地方 例如main方法 将其实例化之后依旧是可以访问使用私有属性和方法的。只要在同一个文件内 都属于是内部。
演示,新建两个文件temporary.dart和test.dart,
注:两个文件要在同一个文件夹下
temporary.dart
在这里插入图片描述

test.dart在这里插入图片描述

getter和setter

在这里插入图片描述
get是一个计算属性,将函数体内计算的结果赋值给get属性。
注意:

		get没有() 参数列表
		set只能有一个形参

第四部分:静态成员

静态成员和静态方法

在Dart中,类里面可以有静态成员(方法或者属性),使用static 关键字来定义静态成员。
静态成员是独立于类中的,不关联上下文。在使用的时候无需实例化类,直接通过类名.变量名来使用。
注意:因为静态成员是不关联上下文的,所以静态方法不能访问非静态成员,非静态方法可以访问静态成员。
演示,
在这里插入图片描述

第五部分:对象操作符

? 条件运算符

例如如下这种情况,在这里插入图片描述
运行代码之后报错了,因为并没有给变量p进行实例化的赋值,只是声明了它的类型。像这种情况p就是空数据,所以怎么可能会有属性或者方法呢。
就需要用到?操作符,来检测变量p是否为空,如果是空就不进行后面的操作 不操作name属性。所以输出的结果是空。
在这里插入图片描述

as 类型转换

这个并不是像第三节中讲到的类型转换,如String转num num转String。而是可以使用as将子类转换为父类,例如有一个类Person,又有一个类Student,然后Student继承于Person类 是Person类的子类,就可以使用as将Student转换成父类Person 然后使用Person的方法。
例子演示,
在这里插入图片描述

is 类型判断

之前在第三节就讲过is类型判断了,忘记的可以去翻看第三节的内容。我们这节讲的是类,自然就是和类有关的操作。
在上文中说到过Dart是一门面向对象的编程语言。Dart所有的东西都是对象,所有的对象都继承自Object类。,所有的类都是Object的子类。
既然说所有的类型都是Object的子类,那我们学会了使用is,就用is来测试一下。
在这里插入图片描述
测试成功,所有的类型都是Object。

… 级联操作

我们看这样一个类,
在这里插入图片描述
在main函数中实例化之后,按照我们目前所学的知识,想去使用它这样操作,在这里插入图片描述
三行语句,分别去设置name属性、设置age属性、调用printInfo函数。使用级联操作可以一步到位,在这里插入图片描述

第六部分:类的继承

类的继承

有一个表示人的类型 Person,有三个属性 姓名、性别、年龄。
在这里插入图片描述
我们要再建立一个表示学生的类型 Student,就可以直接继承自Person类,因为学生也是人,也有姓名、性别和年龄的属性,只是在此基础上新增一个学号的属性。在这里插入图片描述
继承使用extends关键字操作。继承一个类之后就属于其类的子类,被继承的类就是子类的父类。子类继承父类所有的公开的属性和方法,包括set和get,也可以重写父类的方法、set和get。

super关键词的使用

给父类构造函数传参在这里插入图片描述
给父类命名构造函数传参在这里插入图片描述
子类调用父类的方法在这里插入图片描述
覆写父类的方法
完全重写

在这里插入图片描述

不完全重写在这里插入图片描述

结束

好了,这节讲了类的使用、构造函数、私有方法和属性(类中的getter和setter修饰符的用法)、静态成员、操作符、类的继承六大部分,希望对你有帮助。
下节预告
讲解Dart中的抽象类、多态、接口、和Mixins。

好了,这节就分享这么多了,我们下节再见,祝大家编程愉快!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值