2023_Spark_实验五:Scala面向对象部分演示(一)(IDEA开发)

这篇具有很好参考价值的文章主要介绍了2023_Spark_实验五:Scala面向对象部分演示(一)(IDEA开发)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、面向对象的基本概念

把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象,面向

对象的三大特征:

  •  封装

  •  继承

  •  多态

2、类的定义

简单类和无参方法


class Counter{

private var value =0;

def increment() { value+=1};

def current() =value;

}



//注意:class 前面没有public 关键字修饰

如果要开发main方法,需要将main方法定义在该类的伴生对象中,即:object对

象中,(后续做详细的讨论):


class Counter{

private var value =0;

def increment() { value+=1};

def current() =value;

}



//Scala 中类的定义

class Student1{

//定义属性

private var stuName:String = "Tom"

private var stuAge:Int =20



//成员方法

def getStuName():String = stuName

def setStuName(newName:String) =this.stuName=newName



def getStuAge():Int = stuAge

def setStuAge(newAge:Int) = this.stuAge=newAge

}



object student {

def main(args: Array[String]): Unit = {

//测试student1

var s1 = new Student1



//第一次输出

println(s1.getStuName() + "\t" + s1.getStuAge())



//调用set方法

s1.setStuName("Mary")

s1.setStuAge(25)



//第二次输出

println(s1.getStuName() + "\t" + s1.getStuAge())



//第三次输出

// println(s1.stuName + "\t" + s1.stuAge)



}

}

3、属性的getter和setter方法

当定义属性是private时候,scala会自动为其生成对应的get和set方法,如下所

示:

private var stuName:String = "Tom"

get方法: stuName ----> s2.stuName() 由于stuName是方法的名字,所

以可以加上一个括号

set方法: stuName_= ----> stuName_= 是方法的名字

定义属性:private var money:Int = 1000 希望money只有get方法,没有

set方法??

办法:将其定义为常量private val money:Int = 1000

private[this]的用法:该属性只属于该对象私有,就不会生成对应的set和

get方法。如果这样,就不能直接调用,例如:s1.stuName ---> 错误


//属性的get 和 set 方法

/*

1.当定义属性是private 时候,scala会自动为其生成对应的get 和set方法

private var stuName:String = "Tom"

(1) get 方法:stuName ----> s2.stuName()

(2) set 方法:stuName_=



2.定义属性:private var money:Int = 1000 希望money只有get方法,没有set方法?

方法:将其定义为常量private val money:Int = 1000



3.private[this]

3.private[this]的方法:该属性只属于该对象私有,就不会生成对应的set和get方法

*/



class Student2 {

//定义属性

private var stuName:String = "Tom"

//private [this] var stuAge:Int =20

private var stuAge:Int = 20

private val money:Int = 1000



}



//测试

object Student2 {



def main(args: Array[String]): Unit = {

var s2 = new Student2

println(s2.stuName + "\t" + s2.stuAge)

println(s2.stuName + "\t" +s2.stuAge + "\t" + s2.money)



//修改money的值 --》 error

//s2.money = 2000



}

}

4、内部类(嵌套类)

我们可以在一个类的内部在定义一个类,如下:我们在Student类中,再定义了

一个Course类用于保存学生选修的课程:


import scala.collection.mutable.ArrayBuffer



//嵌套类:内部类

class Student3 {

//定义一个内部类:记录学生选修的课程信息

class Course(val courseName:String,val credit:Int){

//定义其他方法

}

private var stuName:String = "Tom"

private var stuAge:Int = 20

//定义一个ArrayBuffer记录学生选修的所有课程

private var courseList = new ArrayBuffer[Course]()

//定义方法往学生信息中添加新的课程

def addNameCourse(cname:String,credit:Int): Unit ={

//创建新的课程

var c = new Course(cname,credit)

//将课程加入list

courseList += c

}

}



//测试

object Student3 {

def main(args: Array[String]): Unit = {

//创建学生对象

var s3 = new Student3

//给该学生添加新的课程

s3.addNameCourse("Chinese",2)

s3.addNameCourse("English",3)

s3.addNameCourse("Math",4)

//输出

println(s3.stuName + "\t" + s3.stuAge)

println("*********选修课程***********")

for (s <-s3.courseList) println(s.courseName + "\t" + s.credit)

}



}

5、类的构造器

类的构造器分为:主构造器、辅助构造器

主构造器:和类的声明结合在一起,只能有一个主构造器

Student4(val stuName:String,val stuAge:Int)

(1) 定义类的主构造器:两个参数

(2) 声明了两个属性:stuName和stuAge 和对应的get和set方法

辅助构造器:可以有多个辅助构造器,通过关键字this来实现


/*

类的构造器

1.主构造器:和类的声明结合在一起;只能有一个主构造器

Student4(val stuName:String,var stuAge:Int)

(1)定义类的主构造器:两个参数

(2)声明了两个属性:stuName和stuAge 和 对应的get 和 set 方法

2.辅助构造器:可以有多个辅助构造器

通过关键字this 来实现

*/



class Student4 (val stuName:String,val stuAge:Int) {

//定义辅助构造器

def this(age:Int){

//调用主构造器

this("no name",age)

}

}



object Student4 {

def main(args: Array[String]): Unit = {

//创建Student4的一个对象

var s4 = new Student4("Tom",20)

println(s4.stuName + "\t" +s4.stuAge)



//创建一个新的Student4 的对象

var s42 = new Student4(25)

println(s42.stuName + "\t" + s42.stuAge)

}



}

6、Scala中的Object对象

Scala没有静态的修饰符,但Object对象下的成员都是静态的 ,若有同名的

class,这其作为它的伴生类。在Object中一般可以为伴生类做一些初始化等操

作。下面是Java中的静态块的例子。在这个例子中,我们对JDBC进行了初始化:

而Scala中的Object就相当于Java中静态块。

在 Scala 中,是没有 static 这个东西的,但是它也为我们提供了单例模式的

实现方法,那就是使用关键字 object。

Scala 中使用单例模式时,除了定义的类之外,还要定义一个同名的 object 对

象,它和类的区别是,object对象不能带参数。

当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:

companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为

是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问

其私有成员。

Object对象的应用

单例对象


//利用object 对象实现单例模式

object CreditCard {

//变量保存信用卡号,这里比较好的做法,是定义成private[this],即:该属性只属于该对象,这个方法由于定义在object中,所以是静态的,即:单例的



private[this] var creditCardNumber:Long = 0



//产生新的卡号

def generateNewCCNumber():Long = {

creditCardNumber += 1

creditCardNumber

}

//测试程序

def main(args: Array[String]): Unit = {

//产生新的卡号

println(CreditCard.generateNewCCNumber())

println(CreditCard.generateNewCCNumber())

println(CreditCard.generateNewCCNumber())

println(CreditCard.generateNewCCNumber())

}

}

使用应用程序对象:可以省略main方法;需要从父类App继承。文章来源地址https://www.toymoban.com/news/detail-694522.html


//使用应用程序对象,可以省略main方法

object HelloWorld extends App{



/*

def main(args: Array[String]): Unit = {

//这里的main就可以不写。相当于下面的代码是在main方法中执行的。

}

*/

println("Hello World")

///如何取得命令行的参数

if(args.length > 0) {

println(args(0))

}else{

println("no arguents")

}

}

到了这里,关于2023_Spark_实验五:Scala面向对象部分演示(一)(IDEA开发)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Scala面向对象编程(高级部分)

    (1)回顾Java中的静态概念 public static 返回值类型 方法名(参数列表) {方法体} 静态属性… 说明: Java中静态方法并不是通过对象调用的,而是通过类对象调用的,所以静态操作并不是面向对象的。 (2)Scala中静态的概念-伴生对象 ①Scala语言是完全面向对象(万物皆对象)的语言

    2024年02月09日
    浏览(49)
  • 2023_Spark_实验八:Scala高级特性实验

    1、什么是泛型类 和Java或者C++一样,类和特质可以带类型参数。在Scala中,使用方括号来定义类型 参数,如下所示: 2、什么是泛型函数 函数和方法也可以带类型参数。和泛型类一样,我们需要把类型参数放在方法名之 后。 注意:这里的ClassTag是必须的,表示运行时的一些信

    2024年02月08日
    浏览(31)
  • 2023_Spark_实验四:SCALA基础

    或者用windows徽标+R  输入cmd 进入命令提示符 输入scala直接进入编写界面 1、Scala的常用数据类型 注意:在Scala中,任何数据都是对象。例如: 1. 数值类型:Byte,Short,Int,Long,Float,Double Byte: 8位有符号数字,从-128 到 127 Short: 16位有符号数据,从-32768 到 32767 Int: 32位有符号

    2024年02月10日
    浏览(44)
  • 2023.5.5 面向对象程序设计实验报告

    实验项目名称:模板 1、熟练掌握函数模板和类模板的定义格式。 2、熟练运用函数模板和类模板解决实际问题。 1、复数类Complex有两个数据成员:a和b, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,用于计算两个复数的距离)的成员函数。 要求设计一个

    2024年02月02日
    浏览(115)
  • 2023_Spark_实验二:IDEA安装及配置

    一、下载安装包 链接:百度网盘 请输入提取码 所在文件夹:大数据必备工具--》开发工具(前端+后端)--》后端 下载文件名称:ideaIU-2019.2.3.exe (喜欢新版本也可安装新版本,新旧版本会存在部分差异) IDEA 安装 第一步,双击 ideaIU-2019.2.3.exe 安装包,出现如下页面,点击图中

    2024年02月10日
    浏览(47)
  • Scala之面向对象(2)

    目录 单例对象(伴生对象): 创建对象常用的两种方法: (1)使用构造器构造(new) (2)使用静态方法  伴生对象的定义: apply方法: apply方法的调用: 单例模式: 单例模式分为两种: 1.懒汉式 2.饿汉式:(推荐) 特质(Trait): 基本语法: 说明 特质叠加: 特质和抽象

    2024年02月01日
    浏览(36)
  • Scala之面向对象

    目录 Scala包: 基础语法: Scala包的三大作用: 包名的命名规范: 写包的好处: 包对象: 导包说明: 类和对象: 定义类: 封装: 构造器:  主从构造器的加载机制: 继承: 基础语法: 抽象属性: 多态: Java中的多态测试 Scala测试如下: Scala的面向对象思想和Java是一致的

    2023年04月15日
    浏览(29)
  • Scala面向对象

    组成结构 •构造函数: 在创建对象的时候给属性赋值 •成员变量: •成员方法(函数) •局部变量 •代码块 每个类都有一个主构造器,这个构造器和类定义\\\"交织\\\"在一起类名后面的内容就是主构造器,如果参数列表为空的话,()可以省略 scala的类有且仅有一个主构造器,要想提

    2024年02月09日
    浏览(32)
  • Scala(第六章 面向对象)

    1、 Scala的面向对象思想和Java的面向对象思想和概念是一致的。 2、Scala中语法和Java不同,补充了更多的功能。 1)基本语法 1 2)Scala包的三大作用(和Java一样) 1、区分相同名字的类 2、当类很多时,可以很好的管理类 3、控制访问范围 6.1.1 包的命名 1)命名规则 只能包含数

    2024年02月13日
    浏览(46)
  • 06-Scala面向对象

    ​ Scala是一门完全面向对象的语言,摒弃了Java中很多不是面向对象的语法。 ​ 虽然如此,但其面向对象思想和 Java的面向对象思想还是一致的 1)基本语法 Scala中基本的package包语法和 Java 完全一致 例如: 2)Scala包的三大作用(和Java一样) 区分相同名字的类 当类很多时,可

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包