Spark大数据分析与实战笔记(第一章 Scala语言基础-4)
文章目录
- 每日一句正能量
- 1.4 Scala面向对象的特性
- 1.4.1 类与对象的特性
- 1.4.2 继承
- 1.4.3 单例对象和伴生对象
- 1.4.4 特质
每日一句正能量
若要快乐,就要随和;若要幸福,就要随缘。快乐是心的愉悦,幸福是心的满足。别和他人争吵,别和命运争吵,无计较之心,心常愉悦;尽心之余,随缘起止,随遇而安,心常满足。你随和,愉悦的是自己的心,别人计较,苦闷的是他自己。一天的心情靠随和,一生的幸福靠随缘。
1.4 Scala面向对象的特性
无论是在Scala中还是Java中,类都是对象的抽象,而对象都是类的具体实例;类不占用内存,而对象占用存储空间。由于面向对象的核心是对象,若想要在应用程序中使用对象,就必须得先创建一个类。类是用于描述一组对象的共同特征和行为。
1.4.1 类与对象的特性
创建类的语法格式如下:
class 类名[参数列表]
当类创建好之后,若是想要访问类中的方法和字段,就需要创建一个对象。
创建对象的语法格式如下:
类名 对象名称 = new 类名();
下面创建一个Point类,并在类中定义两个字段x和y以及一个没有返回值的move( )方法,使Point类的实例对象来访问类中的方法和字段,代码如下所示:
package cn.itcast.scala
//定义类
class Point(xc:Int,yc:Int){
//定义字段var x:Int = xcvar y:Int = yc//定义方法def move(dx:Int,dy:Int):Unit = {x = x + dxy = y + dyprintln("x的坐标点:"+x)println("y的坐标点:"+y)}
}
object Ch07_ClassTest {def main(args: Array[String]): Unit = {//定义类对象val pt = new Point(10,20)//移动到一个新的位置pt.move(10,10)}
}
1.4.2 继承
- Scala和Java类似,只允许继承一个父类。
- Java只能继承父类中非私有的属性和方法,而Scala可以继承父类中的所有属性和方法。
在Scala子类继承父类的时候,有以下几点需要注意
- 如果子类要重写一个父类中的非抽象方法,则必须使用override关键字,否则会出现语法错误。
- 如果子类要重写父类中抽象方法时,则无需使用override关键字
下面,创建一个Point类和Location类,并且Location类继承Point类,演示子类Location重写父类Point中的字段,具体代码如下所示:
package cn.itcast.scala
//定义父类:Point类
class Point2(val xc:Int,val yc:Int){//定义字段var x:Int = xcvar y:Int = yc//定义方法def move(dx:Int,dy:Int):Unit = {x = x + dxy = y + dyprintln("x的坐标点:"+x)println("y的坐标点:"+y)}
}//定义子类:Location类继承Point类
class Location(override val xc:Int,override val yc:Int,zc:Int) extends Point2 (xc,yc){var z:Int = zcdef move(dx:Int,dy:Int,dz:Int): Unit ={x = x + dxy = y + dyz = z + dzprintln("x的坐标点:"+x)println("y的坐标点:"+y)println("z的坐标点:"+z)}
}object Ch08_ExtendsTest {def main(args: Array[String]): Unit = {var loc = new Location(10,20,15)loc.move(10,10,5)}
}
1.4.3 单例对象和伴生对象
在Scala中,没有静态方法或静态字段,所以不能用类名直接访问类中的方法和字段,而是创建类的实例和实例对象对访问类中的方法和字段。但是,Scala中提供了object这个关键字用来实现单例模式,使用关键字object创建的对象为单例对象。
创建单例对象的语法格式如下:
object objectName
下面,创建一个单例对象SingletonObject,代码如下示:
package cn.itcast.scala//创建一个单例对象
object SingletonObject{def hello(): Unit ={println("Hello,This is Singleton object")}
}
object Ch09_Singleton {def main(args: Array[String]): Unit = {//调用hello 方法SingletonObject.hello()}
}
在一个源文件中有一个类和一个单例对象,若单例对象名与类名相同,则把这个单例对象称作伴生对象(companion object),这个类则被称为是单例对象的伴生类(companion class)。类和伴生对象之间可以相互访问私有的方法和字段。
下面,定义一个伴生对象Dog,演示操作类中的私有方法和字段。具体代码如文件1-10所示。
package cn.itcast.scala//创建c:Dog
class CH10_Dog {val id = 666private var name = "二哈"def printName(): Unit ={//在Dog类中可以访问伴生对象Dog的私有字段println(CH10_Dog.CONSTANT + name)}
}//伴生对象
object CH10_Dog {//伴生对象中添加私有字段private var CONSTANT = "汪汪汪。。。"def main(args: Array[String]): Unit = {val dog = new CH10_Dogdog.name = "二哈 666"dog.printName()}
}
1.4.4 特质
在Scala中,Trait(特质)的功能类似于Java中的接口,但Trait的功能却比Java中的接口强大。例如,Trait可以对定义字段和方法进行实现,而接口却不能。Scala中的Trait可以被类和对象(Objects)使用关键字extends来继承。
创建特质的语法格式如下:
trait traitName
下面,创建一个特质Animal,演示类继承特质并访问特质中方法的操作。具体代码如下所示。
package cn.itcast.scala
//定义特质
trait Animal{//定义一个抽象方法(没有实现的方法)def spek()def listen(): Unit ={}def run(): Unit ={println("I'm runing")}
}//定义类,继承特质
class Ch11_People extends Animal {override def spek(): Unit = {println("I'm speaking English")}
}
object Ch11_People {def main(args: Array[String]): Unit = {val people = new Ch11_Peoplepeople.spek()people.listen()people.run()}
}
注:特质允许继承多个,用with关键字。如下所示:
class Ch11_People extends Animal with A
转载自:https://blog.csdn.net/u014727709/article/details/133915097
欢迎start,欢迎评论,欢迎指正
相关文章:
Spark大数据分析与实战笔记(第一章 Scala语言基础-4)
文章目录 每日一句正能量1.4 Scala面向对象的特性1.4.1 类与对象的特性1.4.2 继承1.4.3 单例对象和伴生对象1.4.4 特质 每日一句正能量 若要快乐,就要随和;若要幸福,就要随缘。快乐是心的愉悦,幸福是心的满足。别和他人争吵&#…...
腾讯云服务器端口localhost可以访问,外部无法访问解决
搭建frp跳板,发现无法使用。ssh 连接不上。 主要检查2个东西: 1. ubuntu ufw系统防火墙。这个默认是关掉的 2. tencent这个防火墙规则设置后,还要设置到实例上。 以前不是这样的。就掉坑里了。 # systemctl rootVM-4-4-ubuntu:/lib/syst…...
【软考-中级】系统集成项目管理工程师 【16 变更管理】
持续更新。。。。。。。。。。。。。。。 【第十六章】变更管理 (选择2分 考点 1:变更的常见原因考点 2:变更管理的原则是项目基准化、变更管理过程规范化考点 3考点 4考点 5:变更的工作程序考点 6考点 7考点 8考点 9考点 10考点 11考点 12:变更分类系列文章经典语录 考点 1:变…...
【Eclipse】查看版本号
1.在Eclipse的启动页面会出现版本号 2. Eclipse的关于里面 Help - About Eclipse IDE 如下图所示,就为其版本 3.通过查看readme_eclipse.html文件...
论文精讲目录
ViT论文逐段精读【论文精读】MoCo 论文逐段精读【论文精读】对比学习论文综述【论文精读】Swin Transformer论文精读【论文精读】CLIP 论文逐段精读【论文精读】双流网络论文逐段精读【论文精读】I3D 论文精读【论文精读】视频理解论文串讲(上)【论文精读…...
双飞翼布局和圣杯布局
双飞翼布局和圣杯布局都是一种三栏布局,其中主要内容区域位于中间,左侧栏和右侧栏位于两侧。它们的实现方式类似,但有一些细微的差别。 双飞翼布局的实现原理是通过使用flex布局,给主要内容区域设置flex:1;…...
Hive insert插入数据与with子查询
1. insert into 与 insert overwrite区别 insert into 与 insert overwrite 都可以向hive表中插入数据,但是insert into直接追加到表中数据的尾部,而insert overwrite会重写数据,既先进行删除,再写入 注意:如果存在分…...
如何在Django中集成JWT
文章目录 JWT简介在Django中使用JWT1. 安装2. 配置3. 添加认证接口 客户端使用JWT1. 获取新token2. 调用API3. 刷新token 同步发布在个人站点:https://panzhixiang.cn JWT简介 JWT(JSON Web Token)是一种流行的跨域认证解决方案。它可以在令牌中安全地传输用户身份…...
hive进行base64 加密解密函数
加密 select base64(cast(abcd as binary))YWJjZA 解密 -- 直接解密(结果字段格式为比binary格式) select unbase64(YWJjZA) -- 格式转换 select cast(unbase64(YWJjZA) as string) abcd...
Docker安装GitLab及使用图文教程
作者: 宋发元 GitLab安装及使用教程 官方教程 https://docs.gitlab.com/ee/install/docker.html Docker安装GitLab 宿主机创建容器持久化目录卷 mkdir -p /docker/gitlab/{config,data,logs}拉取GitLab镜像 docker pull gitlab/gitlab-ce:15.3.1-ce.0运行GitLa…...
asp.net酒店管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
一、源码特点 asp.net酒店管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net 酒店管理系统1 二、功能介绍 …...
Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv 计算机竞赛
1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 Yolov安全帽佩戴检测 危险区域进入检测 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&am…...
vue中动态设置source标签
项目中有个视频播放,路径通过接口返回,而且不带后缀,并不确定是什么类型的视频文件,所以要通过source标签去进行设置. 问题:当video中存在source标签的时候,浏览器渲染之后会自动去获取地址,即便地址改变,浏览器也不会再去获取地址。 解决方…...
【16】基础知识:React路由 - React Router 6
一、概述 了解 React Router 以三个不同的包发布到 npm 上,它们分别为 1、react-router:路由的核心库,提供了很多的组件、钩子。 2、react-router-dom:包含 react-router 所有内容,并添加一些专门用于 DOM 的组件&…...
Unity3D 基础——Coroutine 协同程序
Coroutine 称为协同程序或者协程,协同程序可以和主程序并行运行,和多线程有些类似。协同程序可以用来实现让一段程序等待一段时间后继续运行的效果。例如,执行步骤1,等待3秒;执行步骤2,等待某个条件为 true…...
IDEA报错:前言中不允许有内容
idea启动项目提示前言中不允许有内容 .idea\libraries\Maven__axis2_axis2_1_0.xml: ParseError at [row,col]:[1,1] Message: 前言中不允许有内容。 解决方法: 首先修改设置:IDEA–>File–>Settings–>File Encodings–>with No BOM选中报…...
在线课堂分销商城小程序源码系统 带完整搭建教程
大家好啊,今天来给大家分享一个在线课堂分销商城小程序源码系统,一起来看看吧。以下是部分功能实现的核心代码: 系统特色功能一览: 商品模块。包括实物商品、虚拟商品和电子卡密等,每种商品可以设置对应的商品分类。同…...
【存储系统】0. 序
学习资料:大话存储 存储系统底层架构原理极限剖析 终极版 张冬编著——清华大学出版社 2015.01 文章目录 0.1 序0.1.1 信息存储技术溯源0.1.2 数字化信息推动存储技术发展0.1.3 数字存储技术 0.2 存储系统介绍0.2.1 信息0.2.2 数据0.2.3 数据存储0.2.4 用计算机来处…...
逐字稿 | 2 MoCo 论文逐段精读【论文精读】
bryanyzhu的个人空间-bryanyzhu个人主页-哔哩哔哩视频 评价 今天我们一起来读一下 MOCO 这篇论文。 MOCO 是 CVPR 2020 的最佳论文提名,算是视觉领域里使用对比学习的一个里程碑式的工作。而对比学习作为从 19 年开始一直到现在视觉领域乃至整个机器学习领域里最炙…...
【数据结构】排序算法的稳定性分析
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
