A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 只想要一盏灯 中级黑马   /  2013-10-24 11:23  /  1392 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 只想要一盏灯 于 2013-10-24 18:24 编辑

这个是在论坛里面看到的帖子,感觉对我等新人很有帮助,只是下面回复的答案有点看不懂,希望有大神能详细的解释下!谢谢public class DuoTaiTest{        
        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 {
}


下面是回复的答案:
⑴    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)


能不能请童鞋们帮我详细的分析一下这个实现的过程:
a1.show(b);
然后我记得这么一句话:编译看左边,运行看右边,
应该怎么把这句话结合进去呢?
编译看左边,这个a1.show(b)怎么才能够用这句话实现呢?
谢谢大家了

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
很简单啊,       A a1 = new A();    是声明了一个A的对象a1;然后 System.out.println("⑴    " + a1.show(b));
中的a1.show(b)就是对象调用方法呗。传入的b是一个B类的实例。
再看A类的方法:class A {        
        public String show(D obj) {
                return ("A and D");
        }        
        public String show(A obj) {
                return ("A and A");
        }
}因为B类继承了A类,所以这里使用了多态。及调用了方法:public String show(A obj) {
                return ("A and A");
        }
函数参数传递:【A obj = b;】及使用多态:父类引用指向子类对象。

很简单呀,你先把多态的概念弄清楚,这个很好理解的。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 很给力!

查看全部评分

回复 使用道具 举报
多态概念理解清楚了吗?毕老师说的 猫 和 动物   还有 毕姥爷  和毕老师的例子就很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马