【发布时间】:2015-02-17 15:52:06
【问题描述】:
我学到的一件事是 private 在 java 中的含义与在 C++ 中的含义不同。 java 中的private 是基于类的,而不是基于对象的。
即我可以使用“对象点表示法”直接访问另一个对象的私有成员只要我在该对象的类中这样做。
但是,protected 不是很清楚。
我们将不得不在这里考虑两个包:pack1 和 pack2
我们在 pack1 包中声明类 Alpha 和 Beta
并声明 AlphaSub 扩展自 pack1 的 Alpha 和 Gamma 也扩展自 pack2 包中的 Alpha 。
!
这是课程代码,我在这里只包含了与问题相关的课程:Alpha、AlphaSub 和 Gamma
package pack1;
public class Alpha{
private int alphaPrivate;
public int alphaPublic;
protected int alphaProtected;
int alphaPP;
protected int alphaProtected(){
return 1;
}
private int alphaPrivate(){
return 1;
}
}
package pack2;
import pack1.Alpha;
public class AlphaSub extends Alpha{
int alphasubPP;
private int alphasubPrivate;
protected int alphasubProtected;
public int alphasubPublic;
public void meth() throws CloneNotSupportedException{
new AlphaSub().alphaProtected(); //OK
new Gamma().alphaProtected(); /*COMPILE ERROR. */
}
}
显然,即使 AlphaSub 和 Gamma 都从 Alpha 继承 alphaProtected() ,也不能调用 Gamma 从 AlphaSub 继承的 alphaProtected() ..
如果是这种情况,一个类的受保护方法只能从该类中调用,那么从另一个类调用clone [由Object 类的每个类继承] 是不可能的吗??
有人可以澄清一下吗?
【问题讨论】:
标签: java inheritance protected