如何在子类中访问受保护的超类方法?

时间:2017-07-05 19:37:10

标签: java inheritance access-modifiers

我在两个不同的包中有父子类。我重写了一种受保护类型的方法。我想访问子类中的超类保护方法。

请考虑以下代码:

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方法中的注释的答案。

2 个答案:

答案 0 :(得分:2)

在子类中使用super.demoMethod()或者只是从子类中删除它

答案 1 :(得分:0)

你的main()方法无法访问demoMethod()的超类实现 - 因为它在子类中被覆盖。

你的main()方法可以访问 demoMethod(),通过子类类型的引用,即使它受到保护,因为它与你的子类在同一个包中。但它会调用子类实现。

但是如果您“使用超类对象引用来调用demoMethod”,则该方法将无法访问,并且您的代码将无法编译。您的超类是在不同的包中。标记为protected的方法只能由子类和同一包中的代码访问。

如果在子类和超类中都创建了方法public,则调用demoMethod()将调用子类实现,无论引用是超类型还是子类类型。

子类的实例可以调用super.demoMethod()作为其方法实现的一部分。但是main()方法不能。