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

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

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

考虑以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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,它输出"in super method"。我知道,使用超级类对象引用调用demoMethod,从子类中看不到demoMethod

有没有可能?如果是,怎么办?

请考虑我新到Java,并提供替换主方法中的注释的答案。


在子类中,使用super.demoMethod()或将其从子类中完全删除。


您的main()方法无法访问demoMethod()的超类实现,因为它在子类中被重写。

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

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

如果在子类和超类中都使用了方法public,那么调用demoMethod()将调用子类实现,而不管引用是超级类型还是子类类型。

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