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
中执行方法。
请解释一下?
答案 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();