如何限制公共方法访问超类?

时间:2014-04-28 09:53:08

标签: scala

在我的Scala项目中,我有以下类层次结构:

class A {

  def methodA = ...
  ... other methods here ...
}

class B extends A {

  ... other methods here ...
}

在我的课堂设计中,让B成为A的子类是完全合理的。唯一的问题是,methodA仅适用于课程A,但不适用于课程B。不幸的是,我无法将methodA设置为私有,因为它需要可以从类A的任何实例调用。

我是否必须重新考虑我的班级设计,或者是否可以将公共方法methodA的访问权限限制为班级A

2 个答案:

答案 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