每天学一点Scala之 伴生类和伴生对象
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,1、 object 相当于class的单个实例,因此,在object里声明的变量都是静态变量,静态方法2、 在object里声明的变量,都是全局变量,也就是类的公共属性,或者类似于java中父类的属性
千家信息网最后更新 2025年01月25日每天学一点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安全错误
数据库的锁怎样保障安全
模拟山羊怎么毁灭服务器
安卓定时更新本地数据库
软件开发企业 营业税
潮流网络技术 招聘
自动答题软件开发
服务器脱机怎么办
丽水市莲都区裕通网络技术服务部
个人如何做游戏服务器
网络安全等级评定中心
阿里数据库登录
数据库被参照表置空
网络服务器的样子
网络安全宣传大讲堂
宁夏网络安全和信息化会议
加密数据库什么意思
铜梁区综合软件开发流程特点
虹口区会计软件开发售后服务
解析收费站的收费网络安全
lol登录错误服务器没有响应
电视无法找到服务器是怎么了
仅装数据库软件
ftp服务器怎么搭建图文
git服务器权限管理
网络安全的流量检测平台
服务器参数价格概念
手游服务器租用价格表
学软件开发好还是学传媒好
如皋正规网络技术专业服务
数据库设计可以设计哪些
网络安全防护喷雾身体