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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑锅 中级黑马   /  2015-11-18 13:10  /  388 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A{
        public String s(D d){
                return ("A and D");
        }
        public String s(A a){
                return ("A and A");
        }
}
class B extends A{
        public String s(B b){
                return ("B and B");
               
        }
        public String s(A a){
                return ("B and A");
        }
}
class C extends B{}
class D extends B{}
public 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(a2.s(b));
                System.out.println(a2.s(c));
                System.out.println(a2.s(d));
               
               
        }

}
求解 为什么结果是
B and A
B and A
A and D

2 个回复

倒序浏览
A a2=new B()   这句话把子类对象发送给父类应用,这样a2 里面能用的方法为 s(D d) 和s(A a),其中s(A a)被B类中的方法覆盖了,实际返回[B+A ], a2.s(b)和a2.s(c)中参数都继承自A类,只能发送给s(A a),所以返回[B+A ]。
回复 使用道具 举报 1 0
明白了  谢谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马