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

das*_*man 1 java polymorphism

嗨,我只是想承担以下行为..我已经定义了相同的方法 - 基础中的gg()和具有不同访问权限的派生类

Class Base  
{  
// some thing   
**private** Integer gg(){  
 //return something   
 }  
}

Class Derived{  
// something  
**public** Integer gg(){  
//return something  
}  
}
Run Code Online (Sandbox Code Playgroud)

在我初始化变量的主要方法中

  Base d = new Derived()  
Run Code Online (Sandbox Code Playgroud)

并试图调用d.gg()它说Base.gg()是私有的.修改访问说明符是否使方法调用恢复为Base类方法?当我将基类中的gg()的访问指定符更改为public时,它就像多态一样调用Derived类中的方法.

从我读到的有关多态性的内容来看,可以使派生说明符在派生类中的限制性更低,这就是这里的情况.

Oli*_*rth 5

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

如果情况并非如此,请考虑随之而来的荒谬:

Base b;

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

b.ggg();  // Ok, or not?
Run Code Online (Sandbox Code Playgroud)