当前位置: 首页 > news >正文

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

7、Scala中的apply方法()

遇到如下形式的表达式时,apply方法就会被调用:

Object(参数1,参数2,......,参数N)

通常,这样一个apply方法返回的是伴生类的对象;其作用是为了省略new关键字

Object的apply方法举例:

//object的apply方法class Student5(val stuName:String) {}object Student5 {//定义自己的apply方法def apply(stuName: String) = {println("*********Apply in Object **********")new Student5(stuName)}//如果没有这个apply方法,下面创建Mary的时候就会报错def main(args: Array[String]): Unit = {var s51 = new Student5("Tom")println(s51.stuName)var s52 = new Student5("Mary")//由于省略了new关键字,创建这个对象的时候,就会在Object找对应的apply方法println(s52.stuName)}}

8、Scala中的继承

Scala和Java一样,使用extends关键字扩展类。

案例一:Employee类继承Person类


//演示Scala的维承父类class Person(val name:String,val age:Int) {//定义结果def sayHello():String = "Hello" + name + " and the age is " + age}//子类class Employee (override val name:String,override val age:Int,val salary:Int) extends Person(name,age){//重新父类的sayHello方法//注意override 是关键字override def sayHello(): String = "子类中的sayHello方法"}object Demo {//测试程序def main(args: Array[String]): Unit = {//创建一个Employee的对象var p2:Person = new Employee("Mike",25,1000)println(p2.sayHello())//使用匿名子类来创建Person对象//这里我们创建了Person的一个匿名子类,并且在该子类中重写了sayHello方法。var p3:Person = new Person("Jerry",26) {override def sayHello(): String = "匿名子类中的sayHello方法"}println(p3.sayHello())}}

案例二:在子类中重写父类的方法

//子类class Employee (override val name:String,override val age:Int,val salary:Int) extends Person(name,age){//重新父类的sayHello方法override def sayHello(): String = "子类中的sayHello方法"}

案例三:使用匿名子类

//使用匿名子类来创建Person对象//这里我们创建了Person的一个匿名子类,并且在该子类中重写了sayHello方法。var p3:Person = new Person("Jerry",26) {override def sayHello(): String = "匿名子类中的sayHello方法"}println(p3.sayHello())

案例四:使用抽象类。抽象类中包含抽象方法,抽象类只能用来继承。


//Scala中的抽象类//父类:抽象类abstract class Vehicle{//定义抽象方法def checkType():String}//子类class Car extends Vehicle {//实现checkType 方法override def checkType(): String = {"I am a Car"}}class Bycical extends Vehicle {//实现checkType方法override def checkType(): String = {"I am a bike"}}object Demo2 {//定义两个交通工具def main(args: Array[String]): Unit = {var v1:Vehicle = new Carprintln(v1.checkType())var v2:Vehicle = new Bycicalprintln(v2.checkType())}}

案例五:使用抽象字段。抽象字段就是一个没有初始值的字段


package class4//Scala中的抽象字段:就是没有初始值的字段//抽象的父类abstract class Person{//第一个抽象字段,并且只有get方法val id:Int//另一个抽象字段,并且有get和set方法var name:String}//子类:应该提供抽象字段的初始值,否则该子类也,应该是抽象的abstract class Employee1 extends Person {//val id:Int = 1var name:String = "No Name"}class Employee2(val id:Int) extends Person {var name:String = "No Name"}object Demo3 {def main(args: Array[String]): Unit = {var a:Person = new Employee2(1)println(a.id,a.name)}}

9、Scala中的trait(特质)

trait就是抽象类。trait跟Java抽象类最大的区别:trait支持多重继承


package class4/** Scala中的trait* 1.trait 就是抽象类* 2.区别:trait 支持多重继承*///第一个traittrait Human {val id:Intval name:String//方法def sayHello():String = "Hello" + name}//第二个traittrait Actions {//抽象方法def getActionNames():String}//子类class Student(val id:Int,val name:String) extends Human with Actions {override def getActionNames(): String = "Action is running"}object Demo4 {def main(args: Array[String]): Unit = {//创建一个student的对象var s1 = new Student(1,"Tom")println(s1.sayHello())println(s1.getActionNames())}}

10、包的使用

Scala的包和Java中的包或者C++中的命名空间的目的是相同的:管理大型程序中的名称。

Scala中包的定义和使用:

包的定义

包的引入:Scala中依然使用import作为引用包的关键字,例如

而且Scala中的import可以写在任意地方

11、包对象

包可以包含类、对象和特质,但不能包含函数或者变量的定义。很不幸,这是

Java虚拟机的局限。把工具函数或者常量添加到包而不是某个Utils对象,这是

更加合理的做法。Scala中,包对象的出现正是为了解决这个局限。Scala中的包

对象:常量,变量,方法,类,对象,trait(特质)


package class4//Scala中的包对象:常量,变量,方法,类,对象,trait(特质)//定义一个包对象package object MyPackageObject {//常量val x:Int = 0//变量var y:String = "Hello World "//方法def sayHelloWorld():String = "Hello World"//类class MyTestClass {}//对象objectobject MyTestObject {}//特质 traittrait MyTestTrait {}}class Demo3 {//测试def method1 = {//导入需要的包对象import class4.MyPackageObject._//定义MyTestClass的一个对象var a= new MyTestClass}}

12、Scala中的文件访问

读取行


val source = scala.io.Source.fromFile("e:\\temp\\a.txt")println(source.mkString)val lines = source.getLines()for(l<-lines) println(l.toString)

读取字符


val source = scala.io.Source.fromFile("e:\\temp\\a.txt")for(c <-source) println(c)

其实这里的source就指向了这个文件中的每个字符。

相关文章:

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

7、Scala中的apply方法&#xff08;&#xff09; 遇到如下形式的表达式时&#xff0c;apply方法就会被调用&#xff1a; Object(参数1,参数2,......,参数N) 通常&#xff0c;这样一个apply方法返回的是伴生类的对象&#xff1b;其作用是为了省略new关键字 Object的apply方法…...

ArcGIS美化科研论文地图(利用在线底图)

1.加载在线底图服务 在ArcGIS Desktop中打开Catalog窗口&#xff0c;在GIS Servers中点击Add ArcGIS Server&#xff0c;之后选项全部默认&#xff0c;仅在URL中输入以下网址https://services.arcgisonline.com/arcgis 之后就可以看到底图了 我们在WorldElevation3D中选择Nat…...

vue项目静态文件资源下载

业务场景&#xff1a;页面有一个导入功能&#xff0c;需要一个模板文件供下载&#xff0c;文件放在本地。 对于 Vue 3 Vite 项目&#xff0c;使用 require 方法来导入模块是不被支持的。require 是 CommonJS 规范中用于模块导入的方法&#xff0c;在 Webpack 等构建工具中常用…...

Apache Hudi初探(三)(与flink的结合)--flink写hudi的操作(真正的写数据)

背景 在之前的文章中Apache Hudi初探(二)(与flink的结合)–flink写hudi的操作(JobManager端的提交操作) 有说到写hudi数据会涉及到写hudi真实数据以及写hudi元数据,这篇文章来说一下具体的实现 写hudi真实数据 这里的操作就是在HoodieFlinkWriteClient.upsert方法: public …...

解释 Git 的基本概念和使用方式(InsCode AI 创作助手)

Git 是一种分布式版本控制系统&#xff0c;它允许多个用户协同工作并对项目进行版本控制。下面是 Git 的基本概念和使用方式&#xff1a; 基本概念&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;存储代码和版本历史记录的地方。 提交&#xff08;Commit&a…...

【QT】信号和槽(15)

前面的内容说了很多不同的控件如何使用&#xff0c;今天来看下QT的核心&#xff0c;信号与槽&#xff08;Signals and slots&#xff09;&#xff01; 简单理解一下&#xff0c;就是我们的信号与槽连接上了之后&#xff0c;发射一个信号给到槽&#xff0c;槽函数接收到了这个信…...

EFLK日志平台(filebeat-->kafka-->logstash-->es-->kiabana)

ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 安装顺序 1.安装es 7.17.12 2.安装kibana 7.17.12 3.安装x-pack 保证以上调试成功后开始下面…...

C盘扩容遇到的问题(BitLocker解密、)

120G的C盘不知不觉的就满了&#xff0c;忍了好久终于要动手了。 尽管电脑-管理--磁盘管理里可以进行磁盘大小调整&#xff0c;但由于各盘都在用&#xff0c;不能够连续调整&#xff0c;所以选用DiskGenius。 # DiskGenius调整分区大小遇到“您选择的分区不支持无损调整容量” …...

ShardingSphere——柔性事务SEATA原理

摘要 Apache ShardingSphere集成了 SEATA 作为柔性事务的使用方案&#xff0c;本文主要介绍其实现ShardingSphere中柔性事务SEATA原理原理。帮助你更好的理解ShardingSphere原理。同时帮助大家更好的使用柔性事务SEATA原理。 一、Seata柔性事务 Apache ShardingSphere 集成了…...

Introducing GlobalPlatform(一篇了解GP)

安全之安全(security)博客目录导读 TEE之GP(Global Platform)认证汇总 目录 一、GP简介 二、GP新的重点领域是什么? 三、认证程序和培训<...

Ubuntu 18.04上无法播放MP4格式视频解决办法

ubuntu18.04系统无法播放MP4格式视频&#xff0c;提示如下图所示&#xff1a; 解决办法&#xff1a; 1、首先&#xff0c;确保ubuntu系统已完全更新。可使用以下命令更新软件包列表&#xff1a;sudo apt update&#xff0c;然后使用以下命令升级所有已安装的软件包&#xff1a…...

科技驱动产业升级:浅谈制造型企业对MES系统的应用

在科技不断进步的背景下&#xff0c;制造型行业也在持续发展&#xff0c;但随之而来的挑战也不断增加。传统的管理方式已经无法满足企业的需求&#xff0c;因此许多制造型企业开始寻找新的管理模式。制造执行系统&#xff08;MES&#xff09;作为先进的制造信息技术之一&#x…...

智能化新十年,“全栈智能”定义行业“Copilot智能助手”

“智能化转型是未来十年中国企业穿越经济周期的利器”&#xff0c;这是联想集团执行副总裁兼中国区总裁刘军在去年联想创新科技大会上做出的判断&#xff0c;而2023年正值第四次工业革命第二个十年的开端&#xff0c;智能化是第四次工业革命的主题。2023年初&#xff0c;基于谷…...

Docker资源控制cgroups

文章目录 一、docker资源控制1、资源控制工具2、Cgroups四大功能 二、CPU 资源控制1、设置CPU使用率上限2、CPU压力测试3、Cgroups限制cpu使用率4、设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09;5、设置容器绑定指定的CPU 三、对内存使用的限制四、对磁盘IO配…...

通过python 获取当前局域网内存在的IP和MAC

通过python 获取当前局域网内存在的ip 通过ipconfig /all 命令获取局域网所在的网段 通过arp -d *命令清空当前所有的arp映射表 循环遍历当前网段所有可能的ip与其ping一遍建立arp映射表 for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%i 通过arp -a命令读取缓存的映射表…...

解决D盘的类型不是基本,而是动态的问题

一、正确的图片 1.1图片 1.2本人遇到的问题 二、将动态磁盘 转为基本盘 2.1 基本概念&#xff0c;动态无法转化为基本&#xff0c;不是双向的&#xff0c;借助软件 网址&#xff1a;转换动态磁盘到普通磁盘_检测到计算机本地磁盘为动态分区_卫水金波的博客-CSDN博客 2.2分区…...

如何判断自己的qt版本呢?

如何判断自己的qt版本呢? 前情提要很简单,按照如下图所示,即可查看当前打开的qtCreator的版本如何打开5.15.2版本的qtCreator呢?安装教程 前情提要 我的电脑已经安装了qt5.14.1,然后我又安装了qt5.15.2,我想尝试一下同一台电脑能否适应两个版本的qt? 当我安装完成qt5.15.2后…...

【文心一言大模型插件制作初体验】制作面试错题本大模型插件

文心一言插件开发初体验 效果图 注意&#xff1a;目前插件仅支持在本地运行&#xff0c;虽然只能自用&#xff0c;但仍然是一个不错的选择。&#xff08;什么&#xff1f;你说没有用&#xff1f;这不可能&#xff01;文心一言app可以支持语音&#xff0c;网页端结合手机端就可…...

ROS 2官方文档(基于humble版本)学习笔记(二)

ROS 2官方文档&#xff08;基于humble版本&#xff09;学习笔记&#xff08;二&#xff09; 理解节点&#xff08;node&#xff09;ros2 runros2 node list重映射&#xff08;remap&#xff09;ros2 node info 理解话题&#xff08;topic&#xff09;rqt_graphros2 topic listr…...

excel中公式结合实际的数据提取出公式计算的分支

要在Excel中使用公式结合实际数据提取分支信息&#xff0c;您可以使用一些文本函数和条件函数来实现这个目标。以下是一个示例&#xff0c;假设您有一个包含银行交易描述的列A&#xff0c;想要从中提取分支信息&#xff1a; 假设交易描述的格式是"分行名称-交易类型"…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...