我的代码:
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
B b = new B();
b.p();
}
}
class A{
void p(){
System.out.println("A");
}
}
class B extends A{
void p(int a){
System.out.println("B :"+a);
}
}
是否允许跨类进行方法重载?因为这在Java中有效。根据概念,我高度怀疑这一点,因为在C ++和C#中给出了错误,但是java编译器会调用正确的函数版本,这是不期望的。
请解释原因和方法?
答案 0 :(得分:4)
是重载在这里工作,因为类B
从类A
继承了重载方法。这在Java Language Specification:
如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等价的,那么方法名称是据说是重载。
答案 1 :(得分:0)
如果从类B对象的实例调用该方法,则如果从类A的对象中调用方法,则调用类B中的方法,即使它在类中包装了类B A,将调用A类的方法
答案 2 :(得分:0)
在这个程序中,当使用B类的对象调用p()时,它将调用A类的p(),因为B类中存在的p()具有带整数参数的p(),这是与调用p()不匹配。
然后它将在A类中搜索没有参数的p(),并且它将找到具有相同signeture的p(),因此它将执行A类的p()。