Java保护访问不编译



问题是关于受保护的访问。此代码有什么问题:

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行不呢?

您正在尝试从Baz访问b,这是不可能的,因为bprotected。只有从Foo派生的类才能访问b

您可以访问met(),因为它没有访问修饰符,因此可以在同一软件包中的类中使用(BazFood都在同一软件包中(。

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

最新更新