Scala 伴侣对象与。 Scala Class 新对象
Scala A companion Object Vs. Scala Class new Object
这是代码和输出:
//A scala class with a private variable and one method
class A {
private var a1 = "Zoom"
def A1(): Unit = {
println("A1 Class")
}
}
//A companion object
object A {
def A2(): Unit = {
println("A1 Obj")
val objA = new A
objA.A1()
println("a1 -> "+ objA.a1)
}
}
Output
======
A1 Obj
A1 Class
a1 -> Zoom
现在我的疑问是,如果我不想使用 new 运算符创建 A 的对象 class,A 伴生对象如何打印 a1(私有变量) 值并访问 A class 的 A1 方法。我的意思是说我想通过伴随对象 A.
访问 Companion Class A 的两个成员
//A companion object
object A {
def A2(): Unit = {
println("A1 Obj")
A.A1() //It should print A1 Class
println("a1 -> "+ A.a1) //It should print Zoom
}
}
上面的代码片段也应该可以正常工作,因为在 Mardin Odersky 的书中已经写到 A class 及其伴随对象可以访问彼此的私有成员。
because in Mardin Odersky's book it has been written that A class and its companion object can access each other’s private members
这只是意味着您可以访问 object A
的第一个片段中的 objA.a1
,即使它不在 class A
中(同样,如果您有任何object A
中的私有成员,您可以从 class A
访问它们)。它与第二个片段完全无关。
Now my doubt is if I don't wanna use new operator to create an Object of A class how can A companion object will print a1(private variable) value and also access the A1 method of A class.
嗯,你需要在某个地方使用 new
,因为只有 class A
的实例有 A1()
方法和 a1
字段。
注意class A
和object A
之间的主要特殊关系就是这个特殊的可见性规则(其他细节可能与你现阶段的学习无关)。所以对于 A1()
调用来说,你有一个伴随对象根本不重要;它同样可以是 object B
.
您可以通过编写 object A extends A
使 object A
成为 class A
的实例,但这只会隐藏编译器生成的代码中的 new
调用。
这是代码和输出:
//A scala class with a private variable and one method
class A {
private var a1 = "Zoom"
def A1(): Unit = {
println("A1 Class")
}
}
//A companion object
object A {
def A2(): Unit = {
println("A1 Obj")
val objA = new A
objA.A1()
println("a1 -> "+ objA.a1)
}
}
Output
======
A1 Obj
A1 Class
a1 -> Zoom
现在我的疑问是,如果我不想使用 new 运算符创建 A 的对象 class,A 伴生对象如何打印 a1(私有变量) 值并访问 A class 的 A1 方法。我的意思是说我想通过伴随对象 A.
访问 Companion Class A 的两个成员//A companion object
object A {
def A2(): Unit = {
println("A1 Obj")
A.A1() //It should print A1 Class
println("a1 -> "+ A.a1) //It should print Zoom
}
}
上面的代码片段也应该可以正常工作,因为在 Mardin Odersky 的书中已经写到 A class 及其伴随对象可以访问彼此的私有成员。
because in Mardin Odersky's book it has been written that A class and its companion object can access each other’s private members
这只是意味着您可以访问 object A
的第一个片段中的 objA.a1
,即使它不在 class A
中(同样,如果您有任何object A
中的私有成员,您可以从 class A
访问它们)。它与第二个片段完全无关。
Now my doubt is if I don't wanna use new operator to create an Object of A class how can A companion object will print a1(private variable) value and also access the A1 method of A class.
嗯,你需要在某个地方使用 new
,因为只有 class A
的实例有 A1()
方法和 a1
字段。
注意class A
和object A
之间的主要特殊关系就是这个特殊的可见性规则(其他细节可能与你现阶段的学习无关)。所以对于 A1()
调用来说,你有一个伴随对象根本不重要;它同样可以是 object B
.
您可以通过编写 object A extends A
使 object A
成为 class A
的实例,但这只会隐藏编译器生成的代码中的 new
调用。