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

How to access a protected method of superclass in a subclass?

我在两个不同的包中有父子 classes。我正在重写受保护类型的方法。我想访问 subclass.

中受 super class 保护的方法

考虑以下代码:

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"
    }
}

在 sub class 的主要方法中,我想访问打印 "In super method" 的 super class demoMethod。我知道使用超级 class 对象引用调用 demoMethod.

从子 class 中看不到 demoMethod

可以吗?如果是,如何?

认为我是 Java 的新手,并提供替换主要方法中注释的答案。

在 child class 中使用 super.demoMethod() 或将其从 child class

中完全删除

您的 main() 方法无法访问 demoMethod() 的 superclass 实现——因为它在子 class.

中被覆盖了

您的 main() 方法可以通过子class 类型的引用 访问 demoMethod(),即使它是受保护的,因为它在与您的子 class 相同的包裹。但它会调用 subclass 实现。

但如果您是 "using superclass object reference to call demoMethod",则该方法将无法访问,并且您的代码将无法编译。您的 superclass 在不同的包中。标记为 protected 的方法只能由子classes 和同一包中的代码访问。

如果您在 subclass 和 superclass 中都创建了方法 public,调用 demoMethod() 将调用 subclass 实现,无论是否引用是 super 或 subclass 类型。

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