Lea*_*ner 8 java polymorphism inheritance overloading
我有3个班GrandParent,Parent和Child,其中
Child extends Parent和Parent extends GrandParent
public class Main {
void test(GrandParent gp){System.out.println("GrandParent");}
void test(Parent p){System.out.println("Parent");}
public static void main(String args[]){
GrandParent obj = new Child();
Main mainObj = new Main();
mainObj.test(obj); // This calls test(GrandParent gp)
mainObj.test(new Child()); // This calss test(Parent gp)
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,2调用test()方法都用Child对象调用不同的方法.其中一个是编译时和其他运行时绑定.这对我来说听起来很奇怪.你会怎么解释这个?
方法重载是编译时多态.
方法重写是运行时多态性.
在您的情况下,您正在重载类的两个实例方法Main.
但是,因为我在你的上下文中推测Child扩展Parent,new Child() instanceof Parent == true因此一个实例Child是test带有参数类型的方法的有效参数Parent.
在第一种情况下,您GrandParent在方法中传递引用类型test,并找到确切的类型.
在第二种情况下,您Child在方法中传递引用类型test.最近的匹配是Parent,因此test(Parent p)被调用.