首页 > 解决方案 > 关于多态性的代码段。为什么以下会导致编译错误?

问题描述

为什么下面的代码会导致编译错误?既然它是一个 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(); 
    } 
}

标签: javapolymorphism

解决方案


这里的问题是该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子类中调用重载版本。


推荐阅读