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