黑马程序员技术交流社区
标题: 一个关于多态的问题 [打印本页]
作者: yin1031468524 时间: 2013-6-1 19:16
标题: 一个关于多态的问题
本帖最后由 yin1031468524 于 2013-6-2 13:01 编辑
- public class PolyDemo{
- 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(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));
-
- }
- }
- 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 {
- }
复制代码 求正确答案,如果都做对了顺便解释下、、、
作者: Super_Class 时间: 2013-6-1 22:55
一句话:
编译看左边,运行看右边。
记住这个基本不会出错。
作者: 王鑫 时间: 2013-6-2 00:03
⑴ A and A 传入对象b,b是a的子类,由public String show(A obj)接收
⑵ A and A 传入对象c,c是a的子类,由public String show(A obj)接收
⑶ A and D 传入对象d,直接由public String show(D obj)接收
⑷ B and A 传入对象b,因为多态的局限性,只能访问父类中的成员,而A类中并没有public String show(B obj),所以由public String show(A obj)接收
⑸ B and A 同(4)
⑹ A and D 传入对象d,因为B类继承了A类中的public String show(D obj)方法,所以直接由public String show(D obj)接收
⑺ B and B 传入对象b,直接由public String show(B obj)接收
⑻ B and B 传入对象c,c是b的子类,由public String show(B obj)接收
⑼ A and D 同(6)
作者: 夜默 时间: 2013-6-2 08:06
多态中成员函数的特点:
在编译时期,参阅引用变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败。
在运行期间,参阅对象所说的类中是否有调用的方法。
总结:编译看左边,运行看右边
在多态中成员变量的特点,无论编译还是运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点,无论编译和运行都参考左边。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |