黑马程序员技术交流社区

标题: 一个关于多态的问题 [打印本页]

作者: 黑锅    时间: 2015-11-18 13:10
标题: 一个关于多态的问题
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
作者: yqlbd    时间: 2015-11-18 16:36
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 ]。
作者: 黑锅    时间: 2015-11-22 10:28
明白了  谢谢。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2