java protected access不编译

时间:2018-02-18 12:23:36

标签: java access protected

问题在于受保护的访问。这段代码出了什么问题:

package pkgA; 
public class Foo { 
    protected int b = 6; 
} 

package pkgB; 
import pkgA.*; 

class Food extends Foo { 
    void met(){
        System.out.println(new Food().b);
    } 
}; 

public class Baz { 
    public static void main(String[] args) { 
        Food fd = new Food(); 
        fd.met();  // *line 1* 
        System.out.println(" " + fd.b); // *line 2*; error : b has          protected access in Foo 
    } 
} 

为什么第1行是好的但第2行不是?

1 个答案:

答案 0 :(得分:0)

您正试图从b访问Baz,这是不可能的,因为bprotected。只有源自Foo的类才能访问b

您可以访问met(),因为它没有访问修饰符,因此可以访问同一个包中的类(BazFood都在同一个包中)。< / p>

这是基本的继承方式。更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html