父类引用变量无法访问子类中的方法

时间:2017-01-18 13:07:42

标签: reference override

FullRow

这不会给出编译错误但会给出运行时错误,但是当我对覆盖执行相同操作时,也就是我在class A{ void a(){ System.out.println("hello a"); } } class B extends A{ void b(){ System.out.println("hello b"); } } public class test{ public static void main(String[] args){ A a= new B(); a.b(); } } 中定义方法b(),那时它在{{1}中执行方法但是,当方法的名称在那时不同时,它不能在class A中执行方法。 请解释一下?

1 个答案:

答案 0 :(得分:0)

这实际上会产生编译错误,原因是方法绑定是在编译时基于引用完成的,因为类A中没有方法b(),所以类不知道这个方法,因此为什么编译错误。

二 将调用类B的方法,因为在运行时jdk知道对象的类型,因此将调用对象方法。因此将调用B的方法。

你也可以通过在A类中添加一个空方法void b()来删除编译错误,所以现在Class A知道方法b()但是在运行时B的b()将被调用

class A{

    void a(){
        System.out.println("hello a");
    }

    void b(){

    }
}

class B extends A{

    void b(){

        System.out.println("hello b");
    }
}


public class Test{

    public static void main(String[] args){

        A a= new B();
        a.b();

    }
}

要获得编译错误并且只有运行时错误,请尝试使用

A b=new A();
((B)b).b();