如果我在 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 中有带有受保护方法的基类的主要内容,如果未能解决你的问题,请参考以下文章