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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ZONGYUTONG91 于 2016-4-21 00:32 编辑

分析以下程序的打印结果,并思考原因:
class  {        
        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{}


分析:① a1是A对象的引用,a1.show(b)调用本类的show方法,传入参数是B对象的引用,B继承A,所以结果是A and A。
          ② a1.show(c)调用本类的show方法,传入参数是C对象的引用,C继承B间接的继承A,所以结果是A and A。
          ③ a1.show(d)调用本类的show方法,传入参数是D对象的引用,所以结果是A and D
          ④ a2父类引用指向子类对象,a2.show(b)编译看左运行看右,因为B继承A所以参数传b不会报错,编译时看A类中参数传A类型的show方法,运行看B类类中参数传A类型的show方法,结果是B and A
          ⑤ a2父类引用指向子类对象,a2.show(c)编译看左运行看右,因为C继承B间接的继承A所以参数传c不会报错,编译时看A类中参数传A类型的show方法,运行看B类类中参数传A类型的show方法,结果是B and A
          ⑥ a2父类引用指向子类对象,a2.show(d)编译看左运行看右,编译时看A类中参数传D类型的show方法,又因为B类中没有该方法,所以运行时调用A的show方法,结果是A and D
          ⑦ b是B对象的引用,b.show(b)直接调用本类的show方法,传入参数是b,结果是B and B
          ⑧ b是B对象的引用,b.show(c)直接调用本类的show方法,传入参数是c,本类中没有传入C类型参数的show方法,从父类中也没有继承,但是C继承B,所以结果是B and B
          ⑨ 直接调用本类的show方法,传入参数是d,本类中没有传入d类型参数的show方法,但从父类中有继承,结果是A and D

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马