多态性 - 在派生类中更改了访问说明符

时间:2011-02-06 19:37:20

标签: java polymorphism

您好,我只是想承担以下行为...... 我已经定义了相同的方法 - 基础中的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类中的方法。

从我读到的关于多态性的内容来看,可以在派生类中限制访问说明符,这就是这里的情况。

2 个答案:

答案 0 :(得分:5)

通过引用到基类访问对象意味着您打算通过基类指定的接口访问它。如果您在基类中声明了方法private,那么您无法通过引用到基础来访问它!

如果不是这样的话,请考虑随之而来的荒谬:

Base b;

if (some condition) {
    b = new Base();
}
else {
    b = new Derived();
}

b.ggg();  // Ok, or not?

答案 1 :(得分:2)

在Java中,超类的私有成员在派生类中可见。因此,派生类中的不可能

  • 引用超类的私有成员 - 它们在那里,但你无法访问它们,它们是超类的内部细节,不打算在派生类中使用,< / LI>
  • 覆盖私有方法

因此,在您的示例中,Derived.gg()方法不会覆盖Base.gg()方法。 Derived.gg()只是一个与Base类中的方法同名的方法,但它们没有任何共同之处。也没有名称冲突,因为Derived类不了解Base.gg()方法。