java中protected所属类子类中问题
Java protected 访问控制符能被用于方法和成员变量。
有的地方说,能被该类的子类所访问,子类可以和父类不在一个包中。 但是对于如下的第2个例子怎么与这个话靠呢 ?
============================
//Bird.java------------------------------
package birdpack;
public class Bird{
protected int nFeathers;
}
============================
例1:能理解,可以用如上的话来解释。
//Duck1.java-----------------------------
package duckpack;
import birdpack.Bird;
public class Duck1 extends Bird{
public void setn(int duck1n){
//在子类中直接访问父类中的protected变量
nFeathers=duck1n;
}
}
例2:怎么理解 ?怎么跟如上的话靠近呢 ?这个怎么编译可以通过呢?
//Duck2.java------------------------------
package duckpack;
import birdpack.Bird;
public class Duck2 extends Bird{
public void construct(int newduck2){
Duck2 d2 = new Duck2();
//在子类中通过子类的对象访问父类中的protected变量,这个是可以通过编译的,为什么?
d2.nFeathers=newduck2;
}
}
既然Duck2.java,那为什么Duck3.java不可以呢
//Duck3.java------------------------------
package duckpack;
import birdpack.Bird;
public class Duck3 extends Bird{
?public void construct(int newduck3){
??Bird b = new Bird();
??//子类中用父类对象反而不能访问父类中的protected变量,为什么?跟Duck2.java有什么区别吗?
??b.nFeathers=newduck3;
?}
}
------解决方案--------------------
protected是子类和包的访问权限,第二个能通过是通过继承实现,第三个你虽然new出了Bird,但是他没有实现继承关系,而且不在同给一个包中,这个时候这个变量就相当于private