Java-即使引用对象指向子类对象,也无法覆盖该方法

时间:2018-11-28 17:24:18

标签: java inheritance

我还有另一个示例程序,该程序的确会覆盖它,但是所有方法都具有相同数量的参数。

class A {
    int a;
    // function with dummy parameters
    void printArray(int i) {
        System.out.println("A");
    }
}

class B extends A {
    //function with dummy parameters
    void printArray(int i, int s) {
        System.out.println("B");
    }
}

public class JavaApplication5 {
    public static void main(String[] args) {
        A ob = new A();
        B o2 = new B();
        A o3;
        o3 = o2;
        o3.printArray(3, 2); // It says that it can not be applied to given type :(
    }
}

1 个答案:

答案 0 :(得分:-1)

如果您不希望出现任何错误,则需要告诉Java解释器,o3可以通过强制转换来调用printArray(3,2)。主要是通过

((B)o3).printArray(3,2);

此外,您正在执行的操作不会覆盖任何内容。 (请注意,您在类A和类B中的方法参数是不同的)重写将是这样的:

class A {
    int a;
    // function with dummy parameters
    void printArray(int i){
        System.out.println("A");
    }
}

class B extends A {
    //function with dummy parameters
    @Override
    void printArray(int i) {
        System.out.println("B");
    }
}

public class Example {
    public static void main(String[] args) {
        A ob = new A();
        B o2 = new B();
        A o3;
        o3 = o2;
        o3.printArray(3);
    }
}

这里,由于类B覆盖了类A中的方法,因此您不需要强制转换任何内容。就Java解释器而言,类A和类B的任何实例都可以调用printArray,因此,是否对象o3是A类或B类的实例。