我在两个不同的包中有父子类。我重写了一种受保护类型的方法。我想访问子类中的超类保护方法。
请考虑以下代码:
package package1;
public class Super
{
protected void demoMethod()
{
System.out.println("In super method");
}
}
package package2;
import package1.Super;
public class Sub extends Super
{
@Override
protected void demoMethod()
{
System.out.println("In sub method");
}
public static void main(String[] args)
{
//code for accessing superclass demoMethod to print "In super method"
}
}
在子类的主要方法中,我想访问打印“超级方法”的超类demoMethod
。我知道使用超类对象引用从子类中看不到demoMethod
来调用demoMethod
。
有可能吗?如果是,怎么样?
考虑我是Java新手并提供替换main方法中的注释的答案。
答案 0 :(得分:2)
在子类中使用super.demoMethod()
或者只是从子类中删除它
答案 1 :(得分:0)
你的main()方法无法访问demoMethod()
的超类实现 - 因为它在子类中被覆盖。
你的main()方法可以访问 demoMethod()
,通过子类类型的引用,即使它受到保护,因为它与你的子类在同一个包中。但它会调用子类实现。
但是如果您“使用超类对象引用来调用demoMethod”,则该方法将无法访问,并且您的代码将无法编译。您的超类是在不同的包中。标记为protected
的方法只能由子类和同一包中的代码访问。
如果在子类和超类中都创建了方法public
,则调用demoMethod()
将调用子类实现,无论引用是超类型还是子类类型。
子类的实例可以调用super.demoMethod()
作为其方法实现的一部分。但是main()方法不能。