日期:2014-05-20  浏览次数:20967 次

终极题!!!!!体会多态
5、 运行下面程序,体会多态的特性.
 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");
}
}

class C extends B {
}

class D extends B {
}

主函数:
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(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)); ⑨  
 问①――>⑨输出结果。
输出结果为:
A and A
A and A
A and D
B and A
B and A
A and D
B and B
B and B
A and D
提供给大家去细细体会一下。
当你完全了解输出的结果,那么多态也就理解透彻了。

------解决方案--------------------
什么叫java 动态单分派 静态多分派 多态就显得很容易了
------解决方案--------------------
不错 支持楼主
------解决方案--------------------
探讨
什么叫java 动态单分派 静态多分派 多态就显得很容易了

------解决方案--------------------
非常好。
------解决方案--------------------
以前有人发过了
------解决方案--------------------
最可能迷惑的是第8个,B有两个show方法,一个参数是C的爸爸,一个参数是C的爷爷,那么传入C的时候,究竟是爸爸接收还是爷爷接收呢,由于爸爸是儿子的上代,而爷爷是儿子的上代的上代,爸爸会更近一些。
------解决方案--------------------
好吧,多态..
------解决方案--------------------
楼主 具体解释一下 有的地方迷迷糊糊的!
------解决方案--------------------
真的不错哦

------解决方案--------------------
探讨

什么叫java 动态单分派 静态多分派 多态就显得很容易了

------解决方案--------------------
这就是传说中的多态!
------解决方案--------------------
求解析
------解决方案--------------------
对4,5,6不理解,求解析
------解决方案--------------------
没有看懂啊 求解释
------解决方案--------------------
Java code

                System.out.println(a1.show(b)); //A and A
        //没有找到对B类实例的方法,但有其父类A实例的方法,故作为A类实例传入
        System.out.println(a1.show(c)); //A and A
        //同上
        System.out.println(a1.show(d)); //A and D
        //A类有对D类实例的方法,作为D类实例传入
        System.out.println(a2.show(b)); //B and A
        //(父类引用子类对象,只有父类的方法,但B类重写了A类方法) 
        //父类A没有对B类实例的方法,作为A类实例传入
        System.out.println(a2.show(c)); //B and A
        //同上
        System.out.println(a2.show(d)); //A and D
        //下面是B类继承A类,有A,B类方法,B类重写父类对A实例的方法
        System.out.println(b.show(a1));//B and A 这个我自己加,为说明方法给重写了
        System.out.println(b.show(b)); //B and B
        System.out.println(b.show(c)); //B and B
        System.out.println(b.show(d));  //A and D
    }
}

------解决方案--------------------