从另一个包调用受保护的方法?

Call a protectedmethods from another package?

package1:
public class A{
    protected void Display(){
        System.out.println("Hello");
    }
}

package2:
import package1.*;

class C extends A{}

public class B{
    public static void main(String[] args){
        C var = new C();
        var.Display(); //error
    }
}

CA 的子类。而Access Modifier protected 表示同一个包或通过继承(可以通过子类从另一个包访问)。但是当我尝试从另一个包调用 protected 方法时。没用。

protected 对子class 可见。如果 class 本身不是 A 的子 class,则它无权访问该方法(即 class 不能调用或引用该方法)。

B 不是 A 的子 class。即使它调用受保护方法的对象是 A 的 subclass 的实例,B 本身也无法访问该方法,因为它不是 subclass A.

换句话说,对 Display() 的调用在 C 中有效,而不是通过 C 的实例在 B 中有效。即使在 C 内,也只允许在 C 自己的实例上使用。

您收到错误是因为 Displayprotected 成员,因此它在 A 的 child class 中可见,而 B 不是 A 的 child class。

package1

package package1;
public class A{
    protected void Display(){
        System.out.println("Hello");
    }
}

package2

 package package2;

import package1.A;

class C extends A {
    public void someMethod() {
        Display();// No error
    }
}
public class B {
    public static void main(String[] args) {
        C var = new C();
        var.Display();// Error
    }
}

旁注:

  1. 关注 Java naming conventions 例如该方法 Display 应命名为 display.
  2. 尝试post编译error-free代码。您 posted 的代码有很多编译错误,例如您在包声明中遗漏了关键字 package