每天学一点Scala之 伴生类和伴生对象
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,1、 object 相当于class的单个实例,因此,在object里声明的变量都是静态变量,静态方法2、 在object里声明的变量,都是全局变量,也就是类的公共属性,或者类似于java中父类的属性
千家信息网最后更新 2026年11月01日每天学一点Scala之 伴生类和伴生对象
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"){ privateval 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{ //伴生对象里的私有属性 跟 普通的私有属性 相比? //伴生对象,伴生类里的私有属性的 使用范围,扩大了。 //伴生对象 与 伴生类可以互相访问彼此的私有属性,而普通私有属性仅仅只能在自己类里使用的 privateval 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: beijingname: zhansan ----> age: 19address: xizhimen ----> school: bjtuname: xiaoming ----> age: 22address: haidian ----> school: bjtuProcess finished with exit code 0
总之:
看到伴生对象,伴生类,要立马想到私有属性
伴生对象的使用场景,也就是说,伴生对象是干什么用的,这样的话,对于理解marathon源码,spark源码是有帮助的,不至于一头雾水。
属性
对象
私有
普通
构造器
测试
变量
也就是
范围
地方
场景
方法
源码
结果
静态
一头雾水
这样的话
一头
之中
也就是说
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业
科技互联网企业
互联网科技社
金融科技与互联网金融
互联网 卓越科技
极限挑战互联网科技
远拓互联网科技
大白互联网科技
湖南洣水互联网科技有限公司扣款
温州喔噻互联网科技有限公司
茂名市互联网科技产业园
晓花互联网科技有限公司网址
链环科技传统企业怎么转型互联网
互联网金融科技名词解释
云南省自由互联网科技有限公司
本届互联网大会上的黑科技
互联网科技平台产品运营
艺电能源互联网科技有限公司招聘
恒生科技指数 中概互联网
互联网科技创新创业项目
没上市的科技互联网公司
互联网 科技
互联网科技的发展
期待互联网科技
互联网科技商业
四川慕妮娅互联网科技有限公司
工业互联网科技成果转化
扫呗互联网科技有限公司
西安有哪些互联网高科技企业
互联网科技和医药行业