为什么保护范围不起作用?

Pra*_*kam 3 java protected

我正在尝试使用Java的受保护范围.

我在package1中有一个Base类:

package package1;

 public class Base {

     protected String messageFromBase = "Hello World";

    protected void display(){
        System.out.println("Base Display");
    }

}
Run Code Online (Sandbox Code Playgroud)

我在同一个包中有一个Neighbor类:

package package1;

public class Neighbour {

    public static void main(String[] args) {
        Base b =  new Base();
        b.display();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在另一个包中有一个子类,它从package1继承Base:

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

    }


}
Run Code Online (Sandbox Code Playgroud)

我的问题是该display()方法不是从子实例调用的.此外,base1.messageFromBase虽然它们被声明为受保护,但是无法访问.

Pra*_*kar 7

注意一些关于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 
Run Code Online (Sandbox Code Playgroud)

它们只能通过包外继承来调用.您不必创建基类对象然后调用,您只需调用即可display()

class Child extends Base {
 public static void main(String[] args) {
    Child child = new Child();
    child.display(); 
  }
}
Run Code Online (Sandbox Code Playgroud)

Makoto专家在他提供的答案中提供了正式文件的链接.