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

news2024/11/19 1:26:45

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 Car

println(v1.checkType())



var v2:Vehicle = new Bycical

println(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 = 1

var 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 支持多重继承

*/



//第一个trait

trait Human {

val id:Int

val name:String



//方法

def sayHello():String = "Hello" + name

}



//第二个trait

trait 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 {



}



//对象object

object MyTestObject {



}



//特质 trait

trait 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就指向了这个文件中的每个字符。

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

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

相关文章

我开课了!《机器学习》公益课9月4日开课

我是黄海广&#xff0c;大学老师&#xff0c;我上的一门课叫《机器学习》&#xff0c;本科生学机器学习有点难&#xff0c;但也不是没有可能&#xff0c;我在摸索中&#xff0c;设计适合本科生的机器学习课程&#xff0c;写了教材&#xff0c;录了视频&#xff0c;做了课件。我…

如何使用SQL系列 之 了解SQL中的约束规则

简介 在设计数据库时&#xff0c;有时可能需要对某些列中允许的数据设置限制。例如&#xff0c;如果你要创建一张表来保存摩天大楼的信息&#xff0c;你可能希望在保存每座大楼高度的列中禁止使用负值。 关系型数据库管理系统(RDBMS)允许你使用约束来控制哪些数据被添加到表中…

PID 算法

1.1 概述 比例&#xff08;Proportion&#xff09;积分&#xff08;Integral&#xff09;微分&#xff08;Differential&#xff09;控制器&#xff08;PID控制器或三项控制器&#xff09;是一种采用反馈的控制回路机制&#xff0c;广泛应用于工业控制系统和需要连续调制控制的…

ArrayList(扩容机制)

文章目录 一、前言二、ArrayList扩容机制1、适用于什么场景&#xff1f;2、ArrayList特点3、ArrayList扩容机制3.1、内存分配的效率&#xff1a;3.2、数据迁移的代价3.3、性能和空间的平衡 三、总结 一、前言 对于ArrayList集合可能大家并不陌生&#xff0c;但ArrayList集合的…

Camera | 12.瑞芯微摄像头自动焦距马达驱动移植

本为你主要讲解如何让摄像头ov13850支持自动对焦功能。 摄像头的对角主要通过VCM马达驱动芯片DW9714来实现的。 一、环境 soc : rk3568 board: EVB1-DDR4-V10 软 件&#xff1a;Android 11 Linux&#xff1a;4.19.232 Camera:ov13850二、DW9714 1.DW9714简介 DW9714专…

企业知识管理的解决方案

人们发现&#xff0c;挖掘知识、创造知识、生产知识&#xff0c;用知识为自己的产品赋予高附加值&#xff0c;才是企业和社会可持续发展的动力之源。所以知识管理越来越受到重视。 知识管理作为一个新兴的管理概念&#xff0c;已经被学术界所接受&#xff0c;但尚未形成一个…

网站用户体验之深度感悟

个性化定制界面和极简版原装界面&#xff0c;哪一个你用起来更加顺手呢&#xff0c;相比之下你更喜欢哪一个&#xff1f; 界面选择&#xff1a; &#xff08;提醒&#xff1a;仅个人感悟。~~&#xff09; 方向一&#xff1a;表明自己的喜好 我个人觉得更喜欢个性化定制界面。…

虚拟机有代理备份、无代理备份是什么?

有代理备份&#xff1a; 在虚拟机内部安装备份代理程序&#xff0c;然后把虚拟机当作物理机一样来进行备份任务。借助虚拟机系统中内置的程序来进行备份的&#xff0c;就像在正常系统中备份那样&#xff0c;借助备份和还原&#xff08;Windows7&#xff09;功能对系统进行备份…

知识图谱笔记:TransE

1 知识图谱介绍 一条知识图谱可以表示为一个三元组(sub,rel,obj)。 举个例子&#xff1a;小明的爸爸是大明&#xff0c;表示成三元组是&#xff08;小明&#xff0c;爸爸&#xff0c;大明&#xff09;。前者是主体&#xff0c;中间是关系&#xff0c;后者是客体。主体和客体统…

layui引入百度地图

<script type"text/javascript" src"//api.map.baidu.com/api?typewebgl&v1.0&ak你的ak"></script> <script src"https://code.bdstatic.com/npm/jquery1.12.4/dist/jquery.min.js"></script> <script src&…

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

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

【微信小程序】父子组件的创建、通信与事件触发;组件生命周期

前言 关于微信小程序中父子组件的创建、传值&#xff0c;以及涉及到的组件生命周期。 使用组件的优点 组件的使用可以提高开发效率并确保功能在各个页面上的应用和修改的一致性。 例如&#xff0c;对于一些重复的功能&#xff0c;比如顶部导航栏或评论区&#xff0c;将其提炼…

MongoDB基础知识点

MongoDB基础知识点 1.MongoDB简介1.1基本信息1.2作用1.3下载 2.MongoDB安装1.Ubuntu22.042.Windows(非msi) 3.MongoDB基本操作1.基本概念2.MongoDB文件增删改查(CURD)1.插入数据2.查询数据3.修改数据4.删除数据5.删除字段 4.MongoDB实战管理系统数据库设计1.设计数据库2.Mongod…

c++ folly::baton

Baton folly::Baton 是 Facebook 开源的一个同步原语&#xff0c;它提供了一种简单而灵活的方式来进行线程间的同步。它属于 Folly 库&#xff0c;是 C 编程语言的一个组件。 Baton 通常用作线程间同步、等待、通知的标识符号&#xff0c;常用姿势是&#xff0c;一些线程调用…

正中优配:红筹股是啥意思?

随着我国经济的高速开展&#xff0c;越来越多的人开始参加到股票出资中。其中&#xff0c;红筹股作为一种特别类型的股票&#xff0c;备受一些出资者的关注&#xff0c;但对于一般出资者来说&#xff0c;红筹股详细含义还不是特别清楚。本文将从多个角度探讨红筹股的含义、特征…

分库分表知识大全及Sharding-JDBC实践

文章目录 一、为什么要分库分表1.1 什么是分库1.2 什么是分表1.3 为什么要分库1.3.1 磁盘存储1.3.2 并发连接支撑 1.4 为什么要分表 二、分库分表解决方案2.1 垂直&#xff08;纵向&#xff09;切分2.1.1 垂直切分优点2.1.2 垂直切分缺点 2.2 水平&#xff08;横向&#xff09;…

了解NAT

局域网内的终端是如何共用一个wan口来上网的&#xff1f; 主要通过NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;协议来实现的 NAT是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地…

无涯教程-Flutter - 数据库

SQLite" class"css-1occaib">SQLite数据库是基于事实和标准SQL的嵌入式数据库引擎&#xff0c;它是小型且经过时间考验的数据库引擎&#xff0c;sqflite软件包提供了许多函数&#xff0c;可以有效地与SQLite数据库一起使用&#xff0c;它提供了操作SQLite数据…

【FreeRTOS】互斥量的使用与逐步实现

在FreeRTOS中&#xff0c;互斥量是一种用于保护共享资源的同步机制。它通过二进制信号量的方式&#xff0c;确保在任意时刻只有一个任务可以获取互斥量并访问共享资源&#xff0c;其他任务将被阻塞。使用互斥量的基本步骤包括创建互斥量、获取互斥量、访问共享资源和释放互斥量…

nepctf2023 部分web复现

目录 <1> EZJAVA_CHECKIN(shiro550) <2> 独步天下-转生成为镜花水月中的王者(环境变量提权) <3> 独步天下-破除虚妄_探见真实(Venom代理&ping%0a绕过rce&c文件描述符未关闭连接父进程修改文件权限) <4> 独步天下-破除试炼_加冕成王(tp6rceu…