当前位置:网站首页>每天学一点Scala之 伴生类和伴生对象
每天学一点Scala之 伴生类和伴生对象
2022-07-30 12:20:00 【武念】
1、 object 相当于class的单个实例,因此,在object里声明的变量都是静态变量,静态方法
2、 在object里声明的变量,都是全局变量,也就是类的公共属性,或者类似于java中父类的属性
3、 object里的构造器,也就是object 内部不在method中的代码,都属于构造器的内容
4、 同样,object的主构造器只会在第一次调用时执行,多次调用,只会执行一次。
object使用场景
1、 单例模式
2、 工具类
伴生对象与 伴生类?
如果有一个class,还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类
要求:
伴生类和伴生对象必须存放在一个.scala文件之中
特性?
//伴生对象、伴生类里的私有属性 跟 普通的私有属性 相比?
//伴生对象,伴生类里的私有属性的 使用范围,扩大了。
//伴生对象 与 伴生类可以互相访问彼此的私有属性,而普通私有属性仅仅只能在自己类里使用的
package com.xej.learning.objectLearning
/** * objectLearning 测试 */
private[objectLearning] class Kafka(val name: String){
//目的:测试多次调用object时,其主构造方法调用几次
def sayHello(): Unit ={
objectTest.name
objectTest.name
objectTest.name
println("--------------------")
}
}
object objectTest {
val name = "spark"
println("----object----主构造器--------")
def main(args: Array[String]): Unit = {
new Kafka("spark").sayHello()
}
}
执行结果如下:
----object----主构造器--------
--------------------
测试用例二:
package com.xej.learning.objectLearning
/** * 主要测试伴生对象,伴生类里的私有属性的访问范围 */
private[objectLearning] class Student(val name: String, val age: Int, address: String="xizhimen"){
private val sex = "male"
val weight = 80
def sayHello(): Unit ={
Student.address = address
//访问伴生对象里的普通属性 以及 私有属性
println("name:\t" + name + " ----> " + " age:\t" + age +
"\naddress:\t" + Student.address + " ----> school:\t" + Student.school)
}
}
object Student{
//伴生对象里的私有属性 跟 普通的私有属性 相比?
//伴生对象,伴生类里的私有属性的 使用范围,扩大了。
//伴生对象 与 伴生类可以互相访问彼此的私有属性,而普通私有属性仅仅只能在自己类里使用的
private val school = "bjtu" //只能在伴生类里,调用,其他地方不能调用
var address = "beijing" //除了伴生类里,其他地方也可以调用,跟普通属性一样
//访问伴生类里的属性
val stu = new Student("lisi",22, "haidian")
println("----访问----伴生类里的---属性-----name:\t" + stu.name)
println("----访问----伴生类里的---私有属性-----sex:\t" + stu.sex)
println("----访问----伴生类里的---属性-----weight:\t" + stu.weight)
}
object objectTest2 {
def main(args: Array[String]): Unit = {
//调用伴生对象里的public属性
println("----address:\t" + Student.address)
//school是伴生对象的私有属性,这里不能访问的
//println("----school:\t" + Student.school)
new Student("zhansan", 19).sayHello()
new Student("xiaoming", 22,"haidian").sayHello()
}
}
测试结果:
----访问----伴生类里的---属性-----name: lisi
----访问----伴生类里的---私有属性-----sex: male
----访问----伴生类里的---属性-----weight: 80
----address: beijing
name: zhansan ----> age: 19
address: xizhimen ----> school: bjtu
name: xiaoming ----> age: 22
address: haidian ----> school: bjtu
Process finished with exit code 0
总之:
看到伴生对象,伴生类,要立马想到私有属性
伴生对象的使用场景,也就是说,伴生对象是干什么用的,这样的话,对于理解marathon源码,spark源码是有帮助的,不至于一头雾水。
边栏推荐
- External Force Estimation Based on Time Delay Estimation with Perturbed Kalman Filter
- Concepts of cloud-native applications and 15 characteristics of cloud-native applications
- 企业如何成功完成云迁移?
- Greenplum 6.0有哪些不可错过的硬核升级与应用?
- I built another wheel: GrpcGateway
- 电流电压采集模块DAM-6160
- 13-GuliMall 基础篇总结
- ModelCoder状态机:对柴油机工况判断策略进行建模
- Matlab基础(4)——矩阵
- What happened when the computer crashed?
猜你喜欢
来n遍剑指--04. 二维数组中的查找
概率论的学习和整理--番外4: 关于各种平均数:算术平均数,几何平均数,调和平均数,以及加权平均数和平方平均数 (未完成)
历时两月,终拿字节跳动offer,算法面试题分享「带答案」
JD.com was brutally killed by middleware on two sides. After 30 days of learning this middleware booklet, it advanced to Ali.
What happened when the computer crashed?
漫谈金丝雀部署(Canary Deployment)
关于香港高防IP需要关注的几个问题
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
物理服务器与虚拟机:主要区别和相似之处
Reverse linked list - recursive inversion method
随机推荐
mapbox-gl开发教程(十四):画圆技巧
概率论的学习整理5:贝叶斯(bayes)法则和贝叶斯概率
私有化部署的即时通讯平台,为企业移动业务安全保驾护航
超图iServer rest服务之最佳路径分析
维护数千规模MySQL实例,数据库灾备体系构建指南
Matlab基础(1)——基础知识
Matlab基础(4)——矩阵
int a=8,a=a++,a? int b=8,b=b+1,b?
New:WebKitX ActiveX :::Crack
手慢无!阿里亿级流量高并发系统设计核心原理全彩笔记现实开源
C#调用explorer.exe打开指定目录
限时招募!淘宝无货源副业,800/天,不限经验,男女皆可,仅限前200名!
[ASP.NET Core] Dependency Injection for Option Classes
JD.com was brutally killed by middleware on two sides. After 30 days of learning this middleware booklet, it advanced to Ali.
看了这些6G原型样机,我想一觉睡到2030年
Matlab绘图(1)——二维绘图
Matlab基础(2)——向量与多项式
数字化时代,寻求企业财务转型路径的最优解
腰部外骨骼机器人线性自抗扰控制器参数优化
PanGu-Coder: 函数级的代码生成模型