一、对象
1.1、伴生对象
相同的名字,在同一个源文件中。 这个就是伴生机制,所谓伴生,就是在语言层面上,把static 成员和非static成员用不同的表达方式,class和object,但双方具有相同的package和name,但是最终编译器会把他们编译到一起,这是纯粹从语法层面上的约定。通过javap可以反编译看到。
package com.chb.test
class Test1 {
var field = "field"
def doSomething = println("do something");
}
object Test1 {
val a = "a string"
def printString = println(a);
}
1、Scala没有静态方法或静态字段,你可以用object这个语法结构来达到相同目的。 2、Object可以扩展其他类或特质,不能提供构造器参数,放在object中的方法都是静态方法。 3、何时使用object :
- 1、作为存放工具函数或常量的地方。
- 2、高效的共享单个不可变实例。
- 3、需要单个实例来协调某个服务时(单例模式)
1、伴生类私有化 2、在伴生对象中创建一个实例 3、在apply()中返回伴生类的实例
package com.chb.scala
import scala.collection.immutable.Map
/**
* 伴生类:
*/
class TestClass private {//1、伴生类私有化
private val tc1 = 1
def add() = {
tc1 + TestClass.tc2 //调用伴生对象的私有属性TestClass.xx
}
def test {
println("test class println")
}
}
/**
* 伴生对象:
*
*/
object TestClass {
val tcInstance = new TestClass() //2、在伴生对象中创建一个实例
private val tc2 = tcInstance.tc1+2 //调用 伴生类 的私有属性,通过伴生类的实例来调用
def apply() = { //3、在apply()中返回伴生类的实例
tcInstance
}
}
object testMain{
def main(args: Array[String]):Unit = {
for(i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?