关于上述Java代码中sh和tr的以下叙述中,哪两个是正确的(写出编号)。 ①sh和tr分别引用同一个对象; ②sh和tr分别引用同一类型的不同的对象: ③sh和tr分别引用不同类型的不同对象: ④sh和tr分别引用同一个对象的不同

admin2009-01-20  53

问题 关于上述Java代码中sh和tr的以下叙述中,哪两个是正确的(写出编号)。
   ①sh和tr分别引用同一个对象;
   ②sh和tr分别引用同一类型的不同的对象:
   ③sh和tr分别引用不同类型的不同对象:
   ④sh和tr分别引用同一个对象的不同拷贝;
   ⑤sh和tr所引用的内存空间是相同的。
下列赋值语句中哪两个是合法的(写出合法赋值语句的编号)。
   ①sq=sh;  ②sh=tr;  ③tr=sq;  ④sq=tr;  ⑤sh=sq;

选项

答案② ⑤

解析 根据Java代码:
   Triangle tr=new Triangle();
   Square sq=new Square();
   Shape  sh=tr;
   可以得出下面的结论:tr引用一个Triangle对象,sq引用一个Square对象,sh和tr引用同一个Triangle对象。因此,对问题1给出的论断,sh和tr引用同一个对象,其引用的内存空间也是相同的,①和⑤正确。对于论断④,由于sh和tr引用同一类型的同一个对象,因此不存在不同的备份。
   根据题目的描述,我们知道perimeter是虚拟函数,所以所有通过sh调用的perimeter都将实际调用Triangle类的perimeter方法。
   .tr->height():因为订引用一个Triangle对象,所以调用Triangle类的height方法。
   .sh->perimeter():因为sh引用的是一个Trangle对象,所以调用Triangle类的 perimeter方法。
   .sq->height():因为sq引用的是Square对象,但Square类并没有height方法,所以未对应任何方法调用。
   .sq->perimeter():因为sq引用的是Square对象,所以调用Square类的perimeter方法。
   .sh->height():虽然sh引用的是一个Trangle对象,sh中并未定义height方法,所以此调用错误。
   .tr->perimeter():因为tr引用一个Triangle对象,所以调用Triangle类的perimeter方法。
   问题3主要考虑类型的问题,我们只能够将子类类型的实例或引用赋值给父类类型的变量或引用。因此,赋值运算的左边一定是右边的父类或同一类型。正确的只有②和⑤。
转载请注明原文地址:https://kaotiyun.com/show/ysjZ777K
0

最新回复(0)