大数据之脚踏实地学19--Scala中类的使用

网友投稿 235 2022-09-16

大数据之脚踏实地学19--Scala中类的使用

前言

在前面的一系列Scala编程基础中,我们介绍了Scala的基本语法、控制流、自定义函数、数据结构等内容。从本期开始将会陆续介绍Scala中面向对象的编程内容,包括类、对象、继承以及特质等。

跟Python、Java等编程语言一样,都包含一个非常重要的部分,那就是类。你可以将类理解为一个画布(或模板),它是一种抽象的对象,其内部一般都会包含两种对象,即属性(可以理解为一些特定变量所对应的值)和方法(理解为用于运算的函数)。

类的创建需要使用class关键词,后面紧跟类的名称(需要注意的是,类的名称应该遵循大驼峰规则,即首字母大写,如果名称包含多个单词,每个单词的首字母都需要大写)。语法如下:

class ClassName(参数名称: 数据类型) { //类内字段 val 变量名称: 数据类型 = 初始值 //类内方法 def 方法名称(参数名称: 数据类型): 函数返回值类型 = { 方法体 }}

当类创建好后,一般需要通过new关键词,构造一个类的实例,然后再通过实例返回类内字段的值和类内方法的运算,具体可以看下面的几个例子。

案例1如下代码中构造了一个Ball类,其中包含一个成员字段(或成员变量)PI,和三个成员方法(或成员函数),这三个方法的功能分别是计算圆的周长、面积和球的体积。读者可以将如下代码复制到txt文件中,并给文件命名为ClassDemo01.scala。

// 导入第三方包import scala.math// 创建一个孤立对象,并定义代码的主入口(即main函数)object ClassDemo01 { def main(args: Array[String]): Unit = { // 使用new关键词构造一个Ball类的实例对象 val ball = new Ball // 查看ball的属性值 println("圆周率为:" + ball.PI) // 计算ball的周长 println("当半径为6.9时,圆的周长为:" + ball.circumference(6.9)) // 计算ball的面积 println(s"当半径为5.8时,圆的面积为:${ball.area(5.8)}") // 计算ball的体积 println(f"当半径为12.7时,球的体积为:${ball.volumn(12.7)}%.2f") }}// 定义一个球类 -- 无参数列表的类class Ball { val PI = 3.14 // 成员字段 // 定义计算周长的方法 def circumference(R:Double): Double = { 2*PI*R } // 定义计算面积的方法 def area(R:Double): Double = { PI*math.pow(R,2) } // 定义计算体积的方法 def volumn(R:Double): Double = { 4/3*PI*math.pow(R,3) }}

读者可以在terminal终端环境中,运行下面的命令,对scala文件做编译和执行:

scalac ClassDemo01.scalascala ClassDemo01

得到的结果如下:

在如上的例子中,定义类时并没有传递类的参数列表,接下来我们再看一个简单的例子,希望读者能够理解类以及上下两个例子的差异。

案例2在下面的代码中我们构造了一个Income类,该类包含了两个参数,分别是字符型的name和双精度浮点型的income。类中没有成员字段,只有一个计算税后收入的方法taxIncome,读者可以将如下代码复制到txt文件中,并给文件命名为ClassDemo02.scala。

// 导入第三方包import scala.io.StdIn._// 创建一个孤立对象,并定义代码的主入口(即main函数)object ClassDemo02{ def main(args:Array[String]): Unit={ val name = readLine("请输入您的姓名:\n") println("请输入您的税前收入:") val income = readDouble() // 对Income类实例化,需要传递两个类参数值 val myIncome = new Income(name, income.toDouble) println(f"您好,${myIncome.name},您的税后收入为${myIncome.taxIncome}%.2f元.") }}// 构造Income类,包含两个类参数class Income(val name:String, val income:Double) { // 定义税后收入的方法 def taxIncome() :Double = { var res:Double = 0 if (income <= 5000) {res = income - 0} else if (income <= 17000) {res = income - (210 + (income-8000)*0.1)} else {res = income - (210 + 900 + (income-17000)*0.2)} return res }}

读者可以在terminal终端环境中,运行下面的命令,对scala文件做编译和执行:

scalac ClassDemo02.scalascala ClassDemo02

得到的结果如下:

需要说明的是,如果类参数使用了val或var这样的关键词,则表明对应的参数便成了类的成员字段,可以通过".字段名"的方法调用对应的值;如果没有使用val或var关键词,并且类体中也没有使用到参数,此时无法通过".字段名"的方法调用对应的值,因为它不再属于类的成员字段。

结语

每天进步一点点:数据分析1480

长按扫码关注我

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

上一篇:记一次python3中文件没有及时刷新到文件的问题
下一篇:大数据应用开发流程​
相关文章

 发表评论

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