Java多态
Java多态
-
首先来看一个经典的例子
public class Polymorphic { class A { public void show(D obj) { System.out.println ("A show D"); } public void show(A obj) { System.out.println ("A show A"); } } class B extends A { public void show(B obj) { System.out.println ("B show B"); } public void show(A obj) { System.out.println ("B show A"); } } class C extends B {} class D extends B {} public static void main(String[] args) { Polymorphic polymorphic = new Polymorphic(); A a = polymorphic.new A(); A a_b = polymorphic.new B(); B b = polymorphic.new B(); C c = polymorphic.new C(); D d = polymorphic.new D(); a.show(a); // A show A a_b.show(a); //① B show A a_b.show(b); //② B show A a_b.show(c); //③ B show A a_b.show(d); //④ A show D } } -
原因
java多态的理解 首先,要看a_b被声明为A类型即用父类型声明变量。所以a_b是按照A类型进行编译链接和调用的, 即a_b对象只有show(A) show(D)两个公开方法,且show(A)是被实际类型B进行覆盖的。 a_b.show(a); //① B show A 按照show(A)调用覆盖的方法。 a_b.show(b); //② B show A 按照show(A)调用覆盖的方法。因为show(B)方法不可见。 a_b.show(c); //③ B show A 按照show(A)调用覆盖的方法。因为show(C)不存在show(B)方法不可见。 a_b.show(d); //④ A show D 按照show(D)调用父类方法。

浙公网安备 33010602011771号