java 多态的情况
参考
http://topic.csdn.net/u/20120415/21/524a6daa-e703-4382-8f42-8c3eb2b51d4f.html?16896 提的问题
参考
http://blog.csdn.net/thinkGhoster/article/details/2307001# thinkGhoster
对多态的分析
常见的Java 多态的概念需要基于继承与方法重写的概念。只有准确满足这两种情况(满足这个基本概念的要求),才会出现多态。
目前遇到的多态情况分为:
Case1: 父类引用指向子类对象
class A{public void fun(){System.out.println("A");} }class B extends A{public void fun(){System.out.println("B");}}public class TestOverride {public static void main(String[] args) {A a = new B();a.fun();}}
class A{public void fun(){System.out.println("A");} public void f(){this.fun();}}class B extends A{public void fun(){System.out.println("B");}}public class TestOverride {public static void main(String[] args) {B b = new B();b.f();}}
class A{private void fun(){System.out.println("A");} public void f(){this.fun();}}class B extends A{public void fun(){System.out.println("B");}}public class TestOverride {public static void main(String[] args) {B b = new B();b.f();}}
class A { public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } } class B extends A{ public String show(B obj){ return ("B and B"); } public String show(A obj){ return ("B and A"); } public String show(C obj){ return ("B and C"); }}class C extends B{} class D extends B{} class Test{public static void main(String[] args){ A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a1.show(b)); System.out.println(a1.show(c)); System.out.println(a1.show(d)); System.out.println(a2.show(a2)); System.out.println(a2.show(b)); System.out.println(a2.show(c)); System.out.println(a2.show(d)); System.out.println(b.show(b)); System.out.println(b.show(c)); System.out.println(b.show(d)); }}