在我的Scala项目中,我有以下类层次结构:
class A {
def methodA = ...
... other methods here ...
}
class B extends A {
... other methods here ...
}
在我的课堂设计中,让B
成为A
的子类是完全合理的。唯一的问题是,methodA
仅适用于课程A
,但不适用于课程B
。不幸的是,我无法将methodA
设置为私有,因为它需要可以从类A
的任何实例调用。
我是否必须重新考虑我的班级设计,或者是否可以将公共方法methodA
的访问权限限制为班级A
?
答案 0 :(得分:3)
在我的课程设计中,将B作为A的子类是完全合理的。唯一的问题是methodA仅适用于A类而不适用于B类。
这些陈述不能同时成立。
不幸的是,我无法将methodA设置为private,因为它需要从A类的任何实例调用。
B
的每个实例都是A
的实例(这就是"子类"的含义)。因此,如果该方法不能从B
的实例调用,则它不能从类A
"的任何实例调用。
答案 1 :(得分:0)
以下可能的方式之一:
class A protected() {
//.... methods ....
}
trait AExt extends A {
def foo(s : String) = println(s)
}
object A {
def apply() : A with AExt = new A with AExt
}
class B extends A {
//.... methods ....
}
val a = A()
a.foo("hello")
val b = new B()
// b.foo("hello") // no 'foo' method