【问题标题】:what happens to protected members after inheritance in java?在java中继承后受保护的成员会发生什么?
【发布时间】:2019-07-19 05:58:18
【问题描述】:

在 C++ 中,受保护的成员在私有继承中变得私有。 所以我很困惑 Java 中发生了什么。这里访问说明符保持不变还是什么?喜欢

如果假设下面的代码存在,那么现在 shiva 仍将在 classB 内保持受保护状态?我们可以在 classC 中再次使用它吗?

任何帮助将不胜感激。

package package1
class classA
{
protected shiva;
}

////////////////////////
import package1
package package2
class classB extends classA
{}

//////////////////////
import package2
class classC extends classB
{}

【问题讨论】:

  • 在java中,继承类似于C++公有虚继承。因此,所有访问修饰符都将保持不变

标签: java inheritance protected


【解决方案1】:

是的,你可以使用它。

            │ Class │ Package │ Subclass │ Subclass │ World
            │       │         │(same pkg)│(diff pkg)│ 
────────────┼───────┼─────────┼──────────┼──────────┼────────
public      │   +   │    +    │    +     │     +    │   +     
────────────┼───────┼─────────┼──────────┼──────────┼────────
protected   │   +   │    +    │    +     │     +    │         
────────────┼───────┼─────────┼──────────┼──────────┼────────
no modifier │   +   │    +    │    +     │          │    
────────────┼───────┼─────────┼──────────┼──────────┼────────
private     │   +   │         │          │          │    

 + : accessible         blank : not accessible

如需更多参考,请查找此问题的答案here。在我看来是相似的。

【讨论】:

    【解决方案2】:

    是的,您可以在子类中使用受保护的字段。

    【讨论】:

      【解决方案3】:

      受保护的访问修饰符位于公共访问修饰符和默认访问修饰符之间。它可以在包外访问,但只能通过子类访问。

      请参阅此链接以获得更清晰的信息。

      https://www.tutorialride.com/core-java/inheritance-access-modifiers-in-java.htm

      所以是的,您可以在子类中使用它。

      【讨论】:

        猜你喜欢
        • 2012-10-03
        • 2016-06-12
        • 2014-06-09
        • 2018-12-27
        • 2023-03-03
        • 2014-01-30
        • 2011-05-24
        • 1970-01-01
        • 2018-10-21
        相关资源
        最近更新 更多