java - 关于多态性的代码段。为什么以下会导致编译错误?
问题描述
为什么下面的代码会导致编译错误?既然它是一个 GeeksforGeeks 对象,它不应该使用 GeeksforGeeks 类中的 getValue() 方法吗?我在基类中添加了一个 getValue() 方法并编译了代码。这是什么原因?
class GFG
{
protected void getData()
{
System.out.println("Inside GFG");
}
}
class GeeksforGeeks extends GFG
{
protected void getData()
{
System.out.println("Inside GeeksforGeeks");
}
protected void getValue()
{
System.out.println("GeeksforGeeks");
}
}
public class Test
{
public static void main(String[] args)
{
GFG obj = new GeeksforGeeks();
obj.getValue();
}
}
解决方案
这里的问题是该getValue()
方法只存在于GeeksForGeeks
子类中,而不存在于父类CFG
中。在您的代码中,您定义obj
为父类类型。
这里的一个解决方法是只给出CFG
一个getValue()
方法:
class GFG {
protected void getData() {
System.out.println("Inside GFG");
}
protected void getValue() {
// do something
}
}
getValue()
通过为类添加任何实现CFG
,您将完成继承链,然后 Java 应该在GeeksForGeeks
子类中调用重载版本。
推荐阅读
- lambda - 和哈希图
> 通过 lambda 流() - mysql - 没有任何 DAO 请求的休眠自动提交
- c# - ASP.NET Core Api-Gateway 中间件
- xml - “出站命名空间与任何给定模式都不匹配”,发送提取的 XML 消息时
- java - 如何识别 Java 代码中的操作系统中断并执行一些操作?
- javascript - 无法使用 MediaStreamTrack 关闭设备手电筒
- powershell - PowerShell中的更多条件而不是逻辑返回
- reactjs - 如何在 react redux 应用程序中正确关闭 axios 请求?
- python-2.7 - ndb 结构化属性的意外行为
- python - django 日期时间输入