如果我在 package1 中有带有受保护方法的基类

Posted

技术标签:

【中文标题】如果我在 package1 中有带有受保护方法的基类【英文标题】:If i have base class in package1 with protected method 【发布时间】:2015-01-15 15:10:14 【问题描述】:

package2 中的子类覆盖该受保护方法 基类包中的测试类具有将在基类的引用中创建子对象的代码 如果尝试调用受保护的方法会发生什么? 它将调用子类方法。能否请您告诉我背后的原因.. 为什么会这样?

package base;

public class Base 
    protected void method()
    
        System.out.println("Base");
    



package base;

import child.Derived;

public class Test 

    public static void main(String[] args) 
        Base b = new Derived();
        b.method();
    


package child;

import base.Base;

public class Derived extends Base 
    protected void method()
    
        System.out.println("Derived");
    


如果我尝试在测试类中创建派生类对象并访问这样的方法

Derived d = new Derived();
    d.method();

它给出了编译时错误。然后方法如何通过基类引用可见。 这在 Java 访问方面如何在内部工作?

【问题讨论】:

这就是多态的工作原理。 【参考方案1】:

它是java中的方法覆盖(另见dynamic binding)。继承类可以访问protected 方法,因此您可以在子类中重写该方法。

当您实例化子类时,您会调用被覆盖的方法。如果您希望调用超类方法。您可以明确使用super 关键字

【讨论】:

请用代码更新您的问题。不要发表评论

以上是关于如果我在 package1 中有带有受保护方法的基类的主要内容,如果未能解决你的问题,请参考以下文章

我无法访问我的基类的受保护成员

Swig 类型映射内部构造函数到受保护

公共密码无法在受保护的工作表中识别

可以通过[重复]在派生类中初始化受保护的基类成员

Twig 访问受保护/私有模型变量

c++ 默认移动赋值不能访问受保护的基成员