【问题标题】:SuperClass/SubClass Inheritance Scope Verification [duplicate]超类/子类继承范围验证 [重复]
【发布时间】:2019-03-04 19:34:17
【问题描述】:

注意:在您错误地将其标记为重复之前,请阅读全文。

所以我不确定这是不是写的,我找不到一个简单的图表来回答它: - 如果您在超类中有一个 PUBLIC、PROTECTED 或 PACKAGE PRIVATE 方法或字段,并且子类在同一个包中,那么包外部或内部的类是否可以通过新的子类对象访问这些方法或字段如果字段或方法是私有的,那么它不能? - 如果您在超类中有一个 PUBLIC 或 PROTECTED 方法或字段,并且子类位于不同的包中,那么包外部或内部的类是否可以通过新的子类对象访问这些方法或字段,如果字段或方法是 PACKAGE PRIVATE,或 PRIVATE 则不能?

换句话说,所有访问组合(32 种组合):public、protected、package private,以及 private 用于方法、字段,用于相同或不同包中的子类,由在一个类中创建子类对象的类访问相同或不同包中的类。 请注意,此问题与“重复”之间的主要区别在于,我想知道在包内/包外使用非子类进行访问。不仅仅是子类中的东西。重复项不够具体,因为有些小规则不像 4 x 2 表那么简单。例如,对于受保护的,包外的子类不能在超类对象上运行超类方法,只能在子类对象上运行。 “重复”中没有回答类似的小问题。

在将其标记为重复之前,你们可以阅读整个该死的东西吗?我解释了为什么不是,但懒惰的人不会阅读全文,也不会回答问题。

【问题讨论】:

  • 为清楚说明它不是重复的部分,最后部分进行了编辑
  • 副本中的 4x5 表涵盖了使用访问修饰符可能发生的所有场景。
  • “例如,对于protected,包外的子类不能对超类对象运行超类方法,只能对子类对象运行。”可以调用父受保护的方法。你混淆了“受保护”和“默认”吗?
  • @Tom 我不会混淆“受保护”和“默认”你在包 A 中类 Foo。你在包 B 中有类 Bar 扩展了 Foo。你在类 bar 中创建新的 Foo。 Foo f = new Foo();您不能使用 f 对象从类 Foo 运行受保护的方法。
  • @Tom 您可以在 Bar 类中创建一个 Bar 对象 b 并从中运行 Foo 方法。

标签: java inheritance subclass


【解决方案1】:

我在文档中找到了这张表:

                  Access Levels

Modifier    Class Package Subclass World
public        Y      Y        Y      Y
protected     Y      Y        Y      N
no modifier   Y      Y        N      N
private       Y      N        N      N


根据我的经验:

public:任何类都可以访问
protected:只有同一个包中继承该类的类可以访问
private:只有类可以访问。子类不能访问其父类的私有字段/方法。

Docs

【讨论】:

  • 让我们以 protected 为例。您在包 A 中有一个类 SuperClass,在包 B 中有一个扩展超类的公共类 SubClass。假设我们在超类中有一个名为 hello() 的受保护方法。该图表显示访问级别包括子类。所以是的,你可以在子类中创建,SubClass sc = new Subclass;并执行 sc.hello()。这会起作用,并且遵循图表,但例如,即使 super 中的 hello 受到保护,您也可以执行 SuperClass s = new SuperClass()。但是你不能做 s.hello() 图表是模棱两可的。即使说可以通过 sub 访问。 @nivas
  • 上次我检查你不能protect 上课。您只能将其设为公开、私有或不保留任何修饰符。
  • Sowwy 我的意思是方法。已编辑。 @BenjaminUrquhart
  • 是的,因为 SuperClass 不是 SubClass 的实例。除了观察之外,我没有任何东西可以支持该声明
  • 然而 hello() 在超类中并且受保护允许扩展。看到这是我一直在寻找的模棱两可和精细的细节,但它很好。
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2016-03-06
相关资源
最近更新 更多