JAVA多态大家已经非常熟悉了,多态机制使得在调用函数时,自动选择实际类型中的覆盖(override)函数。
看如下代码:
package Test; public class Test { public static void main(String []args) { A test = new D(); test.locate(); } } class A { public void locate() { System.out.println("class A"); } } class B extends A { public void locate() { System.out.println("class B"); } } class C extends B { public void locate() { System.out.println("class C"); } } class D extends C { public void locate() { System.out.println("class D"); } }很显然,运行后会输出: class D 如果class D中没有定义locate方法会怎么样呢?答案是会顺着继承关系逐级向上查找,直到遇到定义的locate函数为止,代码如下: package Test; public class Test { public static void main(String []args) { A test = new D(); test.locate(); } } class A { public void locate() { System.out.println("class A"); } } class B extends A { public void locate() { System.out.println("class B"); } } class C extends B { // public void locate() { // System.out.println("class C"); // } } class D extends C { // public void locate() { // System.out.println("class D"); // } } 运行后会输出: class B