关于j**a多态性

时间:2013.09.18 发布人:uniae

关于j**a多态性

已解决问题

谷歌uniae用户在2013.09.18提交了关于“阿q正传关于j**a多态性”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-07-26T20:29:20。classA{
publicStringshow(Dobj){
return("AandD");
}
publicStringshow(Aobj){
return("AandA");
}
}
classBextendsA{
publicStringshow(Bobj){
return("BandB");
}
publicStringshow(Aobj){
return("BandA");
}
}
classCextendsB{}
classDextendsB{}
(二)问题:以下输出结果是什么?

Aa1=newA();
Aa2=newB();
Bb=newB();
Cc=newC();
Dd=newD();
System.out.println(***.show(b));①
System.out.println(***.show(c));②
System.out.println(***.show(d));③
System.out.println(***.show(b));④
System.out.println(***.show(c));⑤
System.out.println(***.show(d));⑥
System.out.println(b.show(b));⑦
System.out.println(b.show(c));⑧
System.out.println(b.show(d));⑨
(三)答案

①AandA
②AandA
③AandD
④BandA
⑤BandA
⑥AandD
⑦BandB
⑧BandB
⑨AandD

为什么答案是这样的,对象间是怎样调用的?希望大家能够帮助她。

详细问题描述及疑问:classA{
publicStringshow(Dobj){
return("AandD");
}
publicStringshow(Aobj){
return("AandA");
}
}
classBextendsA{
publicStringshow(Bobj){
return("BandB");
}
publicStringshow(Aobj){
return("BandA");
}
}
classCextendsB{}
classDextendsB{}
(二)问题:以下输出结果是什么?

Aa1=newA();
Aa2=newB();
Bb=newB();
Cc=newC();
Dd=newD();
System.out.println(***.show(b));①
System.out.println(***.show(c));②
System.out.println(***.show(d));③
System.out.println(***.show(b));④
System.out.println(***.show(c));⑤
System.out.println(***.show(d));⑥
System.out.println(b.show(b));⑦
System.out.println(b.show(c));⑧
System.out.println(b.show(d));⑨
(三)答案

①AandA
②AandA
③AandD
④BandA
⑤BandA
⑥AandD
⑦BandB
⑧BandB
⑨AandD

为什么答案是这样的,对象间是怎样调用的?期待您的答案,不知道说什么,送你一朵小红花吧 !

希望以下的回答,能够帮助你。

第1个回答

用户名:督以离部glsz_200械5  

该问题的关键有两点:
一是问答子类与父类的关系,二是重载方法的调用问题。
子类对象可以直接当成父类对象使用,但反过来就不可以。举例来说,人是父类,学生是人的子类,所以学生六鱼威举对象一定具备人对析不合富矿化坐条顾象的属性,但是人对象就未必具有学生对象的特性。所以学生对象可以当做人对象来调讨战才滑火领使用,但是人对象就不能当做学生对象使用。注意当把子类对象当成父类对象使用时,子类对象将失去所有的子类特性,只保留与父类同名的属性和方法(同名方法不仅是函数名相同,而且参数类型也要一样,否则不予保留)。
一个类中如果定义了重载的方法,则系统在调用方法时,会根据参数的创沿京础华括绝从满测市类型自动选择调用合适的方法。

1***.shows(b),在A中没有含伯油无有B类参数的方法,但是含有A类参数的方法,根据子类对象父类可用的原则,所以调用方法
publicStringshow(Aobj){return川丰部氢鱼随取转价("AandA");}

2**祖粉了步边所品周*.show(c),C类是B类的子类,而B类又是A类的子类,所以C类对象可以当制作A类对象使用。结果同上。

3**级老*.show(d),根据建又结旧错效参数类型直接调用A中的方法
pu打脱blicStringshow(Dobj){
return("AandD");
}

4***.show(b),a2本来是一个B对象,但是将其赋给了A类变量,所以a2只保留了与父类A同名的属性和方色州进局任法。***.show(b)何调用B类中的保留的与父类同名同参方法
publicStringshow(Aobj)...{
return("BandA");
}

5***.show(c),B类的保留方法中没有C类参数方法,但是随造挥之右银银有含有C的父类A的参数方东阶州飞劳排斤按轴法,所以调用的方法
publicStringshow(Aobj){
return("BandA");
}
6***.show(d),调用的是A类中的
publicStringshow(Dobj){
return("AandD");
}
7b.show(b),调用B类中的
publicStringshow(Bobj){
return("BandB");
}
8b.show(c),B类中没有C类参数的方法,但是有B类参数的方法,所以调用方法publicStringshow(Bobj){
return("BandB");
}
9b.show(d),解释同8