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 = stuNamedef setStuName(newName:String) =this.stuName=newNamedef getStuAge():Int = stuAgedef setStuAge(newAge:Int) = this.stuAge=newAge}object student {def main(args: Array[String]): Unit = {//测试student1var 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 = 10003.private[this]3.private[this]的方法:该属性只属于该对象私有,就不会生成对应的set和get方法*/class Student2 {//定义属性private var stuName:String = "Tom"//private [this] var stuAge:Int =20private var stuAge:Int = 20private val money:Int = 1000}//测试object Student2 {def main(args: Array[String]): Unit = {var s2 = new Student2println(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)//将课程加入listcourseList += 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 += 1creditCardNumber}//测试程序def main(args: Array[String]): Unit = {//产生新的卡号println(CreditCard.generateNewCCNumber())println(CreditCard.generateNewCCNumber())println(CreditCard.generateNewCCNumber())println(CreditCard.generateNewCCNumber())}}

使用应用程序对象:可以省略main方法;需要从父类App继承。


//使用应用程序对象,可以省略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")}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hiveserver2经常挂断的原因

hiveserver2经常挂断的原因 HiveServer2 经常挂断可能有多种原因&#xff0c;以下是一些可能导致挂断的常见原因&#xff1a; 资源不足&#xff1a;HiveServer2 需要足够的内存和 CPU 资源来处理查询请求。如果资源不足&#xff0c;可能会导致 HiveServer2 挂断。请确保在配置…

喜讯 | 数智经营新典范,体验家XMPlus荣获「年度数智经营服务商」

7月27日&#xff0c;“助力运营知识与创新传播”的内容服务平台——运营研究社举行了「2023数字化运营生态大会」&#xff0c;会上正式揭晓了「2023数字化运营生态大奖」的四大榜单&#xff0c;体验家XMPlus荣获「年度数智经营服务商」&#xff01;现场有800运营伙伴齐聚&#…

Mysql存储引擎

目录 一、前言 二、存储引擎 1、InnoDB存储引擎 1.1、简介 1.2、优势 1.3、使用方法 1.4、性能 2、MyISAM存储引擎 2.1、优势 2.2、使用方法 2.3、性能 3、MEMORY存储引擎 4、MyISAM 三、比较 四、总结 一、前言 MySQL是开放源代码的关系型数据库管理系统&…

对于枚举类型的输出

对于枚举类型的输出 对于枚举类型的输出&#xff0c;您可以使用以下方法&#xff1a;1. 将枚举值转换为整数进行输出&#xff1a;cppODU_TYPE type ODU_TYPE_331;int value static_cast<int>(type);std::cout << "ODU_TYPE: " << value <<…

python 笔记(3)——request、爬虫、socket、多线程

目录 1、使用requests发送http请求 1-1&#xff09;发送get请求 1-2&#xff09;发送 post 请求 1-3&#xff09;发送 get 请求下载网络图片 1-4&#xff09;使用 post 上传文件 1-5&#xff09;自动维护 session 的方式 2、使用 os.popen 执行cmd命令 3、基于 beautif…

【微服务部署】五、Jenkins+Docker一键打包部署NodeJS(Vue)项目的Docker镜像步骤详解

NodeJS&#xff08;Vue&#xff09;项目也可以通过打包成Docker镜像的方式进行部署&#xff0c;原理是先将项目打包成静态页面&#xff0c;然后再将静态页面直接copy到Nginx镜像中运行。 一、服务器环境配置 前面说明了服务器Nginx的安装和配置&#xff0c;这里稍微有些不同&a…

mysql Index

创建索引 方法1 create table 表( col1 int, col2 int, … index | key index_name (列名) 方法2 alter table 表名 ADD index alter table student_table add index index_name(stu_id); 方法3 create index index_name on 表名(列) 删除索引 方式1 alter table xx drop prima…

革命性的电子元件:RAD继电器 | 百能云芯

在现代电子和通信系统中&#xff0c;RAD继电器是一种关键的电子元件&#xff0c;它在各种应用中发挥着重要作用。RAD继电器&#xff08;Reed-relay Actuated Device&#xff09;是一种基于磁性原理的电子开关&#xff0c;其特点是极其高速、可靠、低功耗和长寿命。下面云芯将为…

【Axure视频教程】表格编号函数

今天教大家在Axure里如何使用表格编号函数&#xff0c;包括表格编号函数的基本原理、在需要翻页的中继器表格里如何正确使用该函数、函数作为条件的应用&#xff0c;包括让指定第几行的元件默认变色效果以及更新对应第几行内容的效果。该教程主要讲解表格编号函数&#xff0c;不…

案例分享:西河水库安全监测信息化系统实施方案

一、项目概述1.1项目背景西河水库信息化工作已开展多年&#xff0c;但是由于西河水库监测设备都已经老化或者损坏&#xff0c;现有设备已渐渐不能满足新时期西河水库信息化和现代化发展需求。因此&#xff0c;灌区管理局拟在运用现代信息和通信技术手段感测、分析、整合水库运行…

大数据(七):Pandas的基础应用详解(四)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…

el-date-picker自定义只能选中当前月份和半年内月份等

需求&#xff1a;el-date-picker只能选中当前月期和当前月期往前半年&#xff0c;其他时间就禁用了不让选择了&#xff0c;因为没数据哈哈。当然也可以选择往前一年等。 一、效果 二、写个日期选择器 :picker-options&#xff1a;日期选项 value-format&#xff1a;选择后的格…

设计模式-工厂模式Factory

工厂模式 b.工厂方法模式 (Factory Method) (重点)1) 简单工厂 Simple Factory1.a) 简单工厂的好处 2) 工厂方法 Factory Method2.a) 对工厂进行抽象化 (版本一)2.b) 对工厂进行缓存 (版本二)2.c) 加载配置文件到缓存中 (版本三)c.1) 产品线 c.抽象工厂模式 (Abstract Factory)…

C++ 嵌套循环

一个循环内可以嵌套另一个循环。C 允许至少 256 个嵌套层次。 语法 C 中 嵌套 for 循环 语句的语法&#xff1a; for ( init; condition; increment ) {for ( init; condition; increment ){statement(s);}statement(s); // 可以放置更多的语句 }C 中 嵌套 while 循环 语句的…

漏洞挖掘-利用

目录 一、文章简介 二、Web漏洞 1.SQL注入 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;利用 &#xff08;3&#xff09;碰到的问题 &#xff08;4&#xff09;防御 &#xff08;5&#xff09;注入思路 &#xff08;6&#xff09;危害 2.任意文件读取 &…

SQL-DQL

-----分组查询----- 1.语法&#xff1a; SELECT 字段列表 FROM 表名 [WHERE 条件 ] GROUP BY 分组字段名 [HAVING 分组后过滤条件]&#xff1b; 2.where与having区别 》执行时机不同&#xff1a;where是分组之前进行过滤&#xff0c;不满足where条件&#xff0c;不参与分组&…

C++ 接口(抽象类)

C 接口是使用抽象类来实现的&#xff0c;接口描述了类的行为和功能&#xff0c;而不需要完成类的特定实现。且抽象类与数据抽象互不混淆&#xff0c; 如果类中至少有一个函数被声明为纯虚函数&#xff0c;则这个类就是抽象类&#xff0c;数据抽象则是一个把实现细节与相关的接口…

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染 文章目录 一、前言二、qr_flutter 包简介三、安装与配置四、基本使用五、高级功能与自定义六、完整实际业务代码示例七、总结 一、前言 亲爱的 Flutter 初学者&#xff0c;你好&#xff01;今天我要与你分享一个…

【黑马头条之项目部署_持续集成Jenkins】

本笔记内容为黑马头条项目的项目部署_持续集成部分 目录 一、内容介绍 1、什么是持续集成 2、持续集成的好处 3、今日内容 二、软件开发模式 1、软件开发生命周期 2、软件开发瀑布模型 3、软件的敏捷开发 三、Jenkins安装配置 1、Jenkins介绍 2、Jenkins环境搭建 …

OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理

前言&#xff1a;在部分大厂笔试时经常会使用OJ题目&#xff0c;这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解&#xff0c;希望对各位读者有所帮助。 题目来自牛客网&#xff0c;欢迎各位积极挑战&#xff1a; HJ73:计算日期到天数转换_牛客网 JZ17:打印…