您好,我只是想承担以下行为...... 我已经定义了相同的方法 - 基础中的gg()和具有不同访问权限的派生类
Class Base
{
// some thing
**private** Integer gg(){
//return something
}
}
Class Derived{
// something
**public** Integer gg(){
//return something
}
}
初始化变量时的主要方法
Base d = new Derived()
并尝试调用d.gg()它说Base.gg()是私有的。修改访问说明符是否使方法调用恢复为Base类方法?当我将基类中的gg()的访问指定符更改为public时,它就像多态一样调用Derived类中的方法。
从我读到的关于多态性的内容来看,可以在派生类中限制访问说明符,这就是这里的情况。
答案 0 :(得分:5)
通过引用到基类访问对象意味着您打算通过基类指定的接口访问它。如果您在基类中声明了方法private
,那么您无法通过引用到基础来访问它!
如果不是这样的话,请考虑随之而来的荒谬:
Base b;
if (some condition) {
b = new Base();
}
else {
b = new Derived();
}
b.ggg(); // Ok, or not?
答案 1 :(得分:2)
在Java中,超类的私有成员在派生类中不可见。因此,派生类中的不可能:
因此,在您的示例中,Derived.gg()
方法不会覆盖Base.gg()
方法。 Derived.gg()
只是一个与Base
类中的方法同名的方法,但它们没有任何共同之处。也没有名称冲突,因为Derived
类不了解Base.gg()
方法。