【问题标题】:Access to base class method only from the derived class只能从派生类访问基类方法
【发布时间】:2014-02-06 16:52:58
【问题描述】:

例如,我有两个类:

class Foo
{
  protected void say() {...};
}

class Bar extends Foo {.....}

我能否以某种方式允许“say”方法仅从 Bar 和其他派生类调用,而不是从 Foo 包中的其他类调用。

【问题讨论】:

  • 制作 Foo abstract 可能是一个适合您的架构的解决方案。
  • @Merguez 我不明白这可能是一个解决方案......
  • @m0skit0 我想我误解了一点。但这会使不扩展 Foo 的类无法访问 say() 方法(因为您无法生成 Foo 的实例)
  • @Merguez 您确实是正确的,如果不需要 Foo 实例,这将是一个有效的解决方案。
  • 遗憾的是,可能需要 Foo 实例来提供默认实现。此外,如果 Bar 与 Foo 在同一个包中,它的“say”方法也可以被其他类访问。所以摘要不是 100% 正确的决定。然而,这是一个有趣的想法。

标签: java inheritance protected


【解决方案1】:

不,受保护的意思是,受保护的成员可以在同一个包和任何包中的所有子类中访问。如果您想限制包级别的访问,请将该类移到单独的包中。

【讨论】:

  • 感谢您的回答。我正在考虑将对象作为参数传递并在“说”中使用 instanceof,但它太脏了,对其他人来说并不明显。因此,您要么将班级移入新包中,要么与正在使用当前包的人员合作。阿米尔特?
  • @Smilez:不客气 :)
【解决方案2】:

Java 中没有这样的访问器可以满足您的需求,并且 AFAIK 无法实现该限制(以简单的方式,即,除了Kugathasan's solution)。

【讨论】:

    【解决方案3】:

    在java中没有办法做到这一点。

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2020-02-11
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多