java 下面protected类型变量怎么不能访问呢?

来源:百度知道 编辑:UC知道 时间:2024/05/24 15:33:16
下面的java程序怎么错了
package mypack1;

public class ClassA {
protected int var2;
}

package mypack2;

public class ClassB extends ClassA {
void a(){
ClassA a = new ClassA();
a.var2 = 3;
}
}

为什么a.var2 = 3这里错误,protected不是子类和同包公开吗?子类和同包二者是and还是or关系?(AB两个类不同包,但是有继承关系)

1.理论:
The protected modifier specifies that the member can only be accessed within its own package (as with package-private) and, in addition, by a subclass of its class in another package.
http://72.5.124.55/docs/books/tutorial/java/javaOO/accesscontrol.html
Protected使该成员只能被和自己同一个class的语句访问(这点和private一样)。另外,protected能使该class的subclass访问。

2.错因:
“protected不是子类和同包公开吗?”
==============================
是,完全是

“子类和同包二者是and还是or关系?”
==============================
是or。也就是同包和子类都可以被公开。

“为什么a.var2 = 3这里错误”
==============================
ClassB才是ClassA的子类,那么要访问var2,直接用var2就可以了(如:在ClassB中,可以使用:var2 = 999;)。
这行ClassA a = new ClassA();这里a是所创建ClassA的一个Instance(类例),并不是ClassA的子类,所以a.var2不能直接访问(除非用public,public的成员可以在任何情况被访问)。

protected不是子类和同包公开吗?这句话正确 二者的关系是or

那上面的结果为什么会感到很