为什么受保护范围不起作用?
Why protected scope is not working?
我正在尝试使用 Java 的受保护范围进行练习。
我在 package1 中有一个 Base class:
package package1;
public class Base {
protected String messageFromBase = "Hello World";
protected void display(){
System.out.println("Base Display");
}
}
我在同一个包裹中有一个邻居 class:
package package1;
public class Neighbour {
public static void main(String[] args) {
Base b = new Base();
b.display();
}
}
然后我在另一个包中有一个child class,它继承自Base from package1:
package package2;
import package1.Base;
class Child extends Base {
public static void main(String[] args) {
Base base1 = new Base();
base1.display(); // invisible
System.out.println(" this is not getting printed" + base1.messageFromBase); // invisible
}
}
我的问题是 child 实例没有调用 display()
方法。此外,base1.messageFromBase
不可访问,尽管它们被声明为受保护。
注意一些关于protected
访问的事情
-They are available in the package using object of class
-They are available outside the package only through inheritance
-You cannot create object of a class and call the `protected` method outside package on it
它们只能通过包外的继承来调用。您不必创建基础 class 的对象然后调用,您可以简单地调用 display()
class Child extends Base {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
Makoto 专家在他提供的答案中提供了 link 作为官方文档。
您使用的是 parent class,而不是 child class,当您试图调用受保护的方法并访问受保护的字段。由于您在 main
中,没有使用 Child
和 not in the same package as Base
的实例,您将无法单独通过父级访问该字段或方法。
您应该创建一个 Child
的新实例来调用您想要的方法。
class Child extends Base {
public static void main(String[] args) {
Child child = new Child();
child.display();
System.out.println(" this will get printed" + child.messageFromBase);
}
}
我正在尝试使用 Java 的受保护范围进行练习。
我在 package1 中有一个 Base class:
package package1;
public class Base {
protected String messageFromBase = "Hello World";
protected void display(){
System.out.println("Base Display");
}
}
我在同一个包裹中有一个邻居 class:
package package1;
public class Neighbour {
public static void main(String[] args) {
Base b = new Base();
b.display();
}
}
然后我在另一个包中有一个child class,它继承自Base from package1:
package package2;
import package1.Base;
class Child extends Base {
public static void main(String[] args) {
Base base1 = new Base();
base1.display(); // invisible
System.out.println(" this is not getting printed" + base1.messageFromBase); // invisible
}
}
我的问题是 child 实例没有调用 display()
方法。此外,base1.messageFromBase
不可访问,尽管它们被声明为受保护。
注意一些关于protected
访问的事情
-They are available in the package using object of class
-They are available outside the package only through inheritance
-You cannot create object of a class and call the `protected` method outside package on it
它们只能通过包外的继承来调用。您不必创建基础 class 的对象然后调用,您可以简单地调用 display()
class Child extends Base {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
Makoto 专家在他提供的答案中提供了 link 作为官方文档。
您使用的是 parent class,而不是 child class,当您试图调用受保护的方法并访问受保护的字段。由于您在 main
中,没有使用 Child
和 not in the same package as Base
的实例,您将无法单独通过父级访问该字段或方法。
您应该创建一个 Child
的新实例来调用您想要的方法。
class Child extends Base {
public static void main(String[] args) {
Child child = new Child();
child.display();
System.out.println(" this will get printed" + child.messageFromBase);
}
}