谁能帮我把这个java代码分析一下我被绕晕了

publicclassPolyDemo09{publicstaticvoidmain(String[]args){Aa1=newA();Aa2=newB();Bb=new... public class PolyDemo09{
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 {
}

这是我运行的结果但是我分析不出来为什么这样
展开
 我来答
希雁山42
2014-02-26 · TA获得超过116个赞
知道答主
回答量:81
采纳率:0%
帮助的人:45.5万
展开全部
//哈哈,感觉这道题真心好啊。不知道楼主是从哪里看到的。
//首先这道题楼主要明白以下两点:
//1:继承时,子类会隐藏父类相同的方法,要调用父类方法就必须使用super关键字。
//2:向上转型时,子类会丢失和父类不同的方法,可以使用父类的不同名的所有方法。
public class PolyDemo09{
public static void main(String[] args){
A a1 = new A();
A a2 = new B();//B类型向上转型丢失与A类不同方法
B b = new B(); 
C c = new C();
D d = new D();

System.out.println("⑴    " + a1.show(b));//B类的父类是A,所以A and A
System.out.println("⑵    " + a1.show(c)); //C类父类的父类是A,D和他是同级。所以A and A
System.out.println("⑶    " + a1.show(d));//D类方法有,所以不会向上转型,所以A and D
System.out.println("⑷    " + a2.show(b)); /*注意这时候a2的两个方法其实是
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("B and A");
}  B的父类是A,所以B and A 
*/
 /**/                                                           
System.out.println("⑸    " + a2.show(c));//C的父类的父类是A,所以B and A;
System.out.println("⑹    " + a2.show(d));  //D有对应方法,所以A and D
System.out.println("⑺    " + b.show(b)); /*这个就是继承了,继承除了隐藏父类中和子类同名的方法外,在子类中可以直接使用父类的方法。所以B and B
所以就变成了
public String show(D obj) {
return ("A and D");
}
public String show(B obj) {
return ("B and B");
}
public String show(A obj) {
return ("B and A");
*/
System.out.println("⑻    " + b.show(c)); //C 的父类是B,所以B and B
System.out.println("⑼    " + b.show(d));//D有相应方法,所以A and 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 {
}
没人傻
推荐于2017-12-15 · TA获得超过115个赞
知道答主
回答量:18
采纳率:0%
帮助的人:3.9万
展开全部
a1.show(b));Class A 中没有show(B obj),B转向B的父类A,执行A show(A obj)--->return "A and A"

a1.show(c));Class A 中没有show(C obj),C转向C的父类B,Class A 中没有show(B obj),再转向父类A,执行A show(A obj)--->return "A and A"

a1.show(d));Class A 中有show(D obj)执行A show(D obj)--->return "A and D"

这个比较特殊:A a2 = new B();父类声明,子类实例,你应该把a2当作子类重写完后的父类看,注意只有父类的方法。

a2.show(b));Class A 中没有show(B obj),B转向B的父类A,执行A show(A obj),A的show 方法被重写,执行B show(A obj)--->return "B and A"

a2.show(c));Class A 中没有show(C obj),C转向C的父类B,Class A 中没有show(B obj),B转向父类A,执行A show(A obj),A的show 方法被重写,执行B show(A obj)--->return "B and A"

a2.show(d));Class A 中有show(D obj)执行A show(D obj)--->return "A and D"
b.show(b)); Class B 中有show(B obj)--->return "B and B"

b.show(c)); Class B 中没有show(C obj),C转向C的父类B,执行B show(B obj)--->return "B and B"

b.show(d)); Class B 中有继承了Class A 的show(D obj),执行A show(D obj)--->return "A and D"
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华傲易49
2014-02-26 · TA获得超过455个赞
知道小有建树答主
回答量:935
采纳率:42%
帮助的人:298万
展开全部
考察的是java的多态知识,主要是父类引用指向子类对象,比如⑴ A and A,a1.show(b),看a1是A的实例然后在A类的方法里找没有show(B obj),然后找有没有show(X obj),X是B的父类(找到了);其实如果没找到在A类的子类里找与没有show(B obj),然后找有没有show(X obj),X是B的父类;就这样找
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶羽仙
2014-02-26 · TA获得超过224个赞
知道答主
回答量:194
采纳率:100%
帮助的人:79.3万
展开全部
a1.show(b)而言,a1是A类,由b类型可知,要调用的方法从A中找,即show(A obj);所以会输出第一行结果;
其余皆可这么分析
追问
找你这么说那第五个和第六个怎么分析
追答
来晚了  上面有更好的回答 就不废话了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
張員瑛
2014-02-26 · TA获得超过154个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:247万
展开全部

我画了个图也有两个没明白(4)(5)

追问
能不能再加点文字说明,还是有点看不明白
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式