从另一个包调用受保护的方法?
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
}
}
C
是 A
的子类。而Access Modifier protected
表示同一个包或通过继承(可以通过子类从另一个包访问)。但是当我尝试从另一个包调用 protected
方法时。没用。
protected
对子class 可见。如果 class 本身不是 A
的子 class,则它无权访问该方法(即 class 不能调用或引用该方法)。
B
不是 A
的子 class。即使它调用受保护方法的对象是 A
的 subclass 的实例,B
本身也无法访问该方法,因为它不是 subclass A
.
换句话说,对 Display()
的调用在 C
中有效,而不是通过 C
的实例在 B
中有效。即使在 C
内,也只允许在 C
自己的实例上使用。
您收到错误是因为 Display
是 protected
成员,因此它在 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
}
}
旁注:
- 关注 Java naming conventions 例如该方法
Display
应命名为 display
.
- 尝试post编译error-free代码。您 posted 的代码有很多编译错误,例如您在包声明中遗漏了关键字
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
}
}
C
是 A
的子类。而Access Modifier protected
表示同一个包或通过继承(可以通过子类从另一个包访问)。但是当我尝试从另一个包调用 protected
方法时。没用。
protected
对子class 可见。如果 class 本身不是 A
的子 class,则它无权访问该方法(即 class 不能调用或引用该方法)。
B
不是 A
的子 class。即使它调用受保护方法的对象是 A
的 subclass 的实例,B
本身也无法访问该方法,因为它不是 subclass A
.
换句话说,对 Display()
的调用在 C
中有效,而不是通过 C
的实例在 B
中有效。即使在 C
内,也只允许在 C
自己的实例上使用。
您收到错误是因为 Display
是 protected
成员,因此它在 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
}
}
旁注:
- 关注 Java naming conventions 例如该方法
Display
应命名为display
. - 尝试post编译error-free代码。您 posted 的代码有很多编译错误,例如您在包声明中遗漏了关键字
package
。