阅读下列说明、图和Java代码,回答问题1至问题3。
【说明】
已知四个类之间的关系如图2-4所示,分别对每个类的方法进行编号,例如Shape的perimeter()为1号,表示为1:perimeter(),Rectangle类的perimeter()为2号,表示为 2:perimeter(),依此类推,其中,每个类的perimeter方法签名相同。
【Java代码】
Triangle tr=new Triangle();
Square sq=new Square();
Shape sh=tr;
关于上述Java代码中sh和tr的以下叙述中,哪两个是正确的(写出编号)。
①sh和tr分别引用同一个对象;
②sh和tr分别引用同一类型的不同的对象:
③sh和tr分别引用不同类型的不同对象:
④sh和tr分别引用同一个对象的不同拷贝;
⑤sh和tr所引用的内存空间是相同的。
第1题:
试题七(共 15 分)
阅读下列说明、图和Java 代码,回答问题1 至问题3,将解答写在答题纸的对应栏内。
[说明]
已知四个类之间的关系如图 7-1 所示,分别对每个类的方法进行编号,例如 Shape的 perimeter()为 1 号,表示为“1:perimeter()” ,Rectangle 类的 perimeter()为 2 号,表示为“2:perimeter()” ,依此类推,其中,每个类的 perimeter方法签名相同。
[Java 代码]
Triangle tr = new Triangle();
Square sq = new Square();
Shape sh = tr;
[问题 1] 关于上述 Java代码中 sh 和 tr 的以下叙述中,哪两个是正确的(写出编号) 。
① sh 和 tr 分别引用同一个对象;
② sh 和 tr 分别引用同一类型的不同的对象;
③ sh 和 tr 分别引用不同类型的不同对象;
④ sh 和 tr 分别引用同一个对象的不同拷贝;
⑤ sh 和 tr 所引用的内存空间是相同的。
[问题 2] 写出下面消息对应的方法编号(如果该消息错误或者没有对应的方法调用,请
填写“无” ) 。
tr.height() (1)
sh.perimeter() (2)
sq.height() (3)
sq.perimeter() (4)
sh.height() (5)
tr.perimeter() (6)
[问题 3] 下列赋值语句中哪两个是合法的(写出合法赋值语句的编号) 。
① sq = sh; ② sh = tr; ③ tr = sq; ④ sq = tr; ⑤ sh = sq;
第2题:
试题五(共 15 分)
阅读下列说明、图和C++代码,回答问题1 至问题3,将解答写在答题纸的对应栏内。
[说明]
已知四个类之间的关系如图 5-1 所示,分别对每个类的方法进行编号,例如 Shape的 perimeter()方法为 1 号,表示为“1:perimeter()” ,Rectangle 类的 perimeter()为2号,表示为“2:perimeter()” ,依此类推,其中,每个类的 perimeter方法都为虚函数且方法签名相同。
[C++代码]
Triangle *tr = new Triangle();
Square *sq = new Square();
Shape *sh = tr;
[问题 1] 关于上述 C++代码中 sh 和 tr 的以下叙述中,哪两个是正确的(写出编号) 。
① sh 和 tr 分别引用同一个对象;
② sh 和 tr 分别引用同一类型的不同的对象;
③ sh 和 tr 分别引用不同类型的不同对象;
④ sh 和 tr 分别引用同一个对象的不同拷贝;
⑤ sh 和 tr 所引用的内存空间是相同的。
[问题 2] 写出下面消息对应的方法编号(如果该消息错误或者没有对应的方法调用,请
填写“无” ) 。
tr->height() (1)
sh->perimeter() (2)
sq->height() (3)
sq->perimeter() (4)
sh->height() (5)
tr->perimeter() (6)
[问题 3] 不考虑内存释放问题,下列赋值语句中哪两个是合法的(写出合法赋值语句的
编号) 。
① sq = sh; ② sh = tr; ③ tr = sq; ④ sq = tr; ⑤ sh = sq;
第3题:
第4题:
试题六(共15分)
阅读以下说明、图和Java代码,填补Java代码中的空缺(1)~(6),将解答写在答题纸的
对应栏内。
【说明】
已知对某几何图形绘制工具进行类建模的结果如图6.1所示,其中Shape为抽象(abstract)类,表示通用图形,Box(矩形)、Ellipse(椭圆)和Line(线条)继承(extends)了Shape类,其中,Circle表示圆(即特殊的椭圆)。
下面的Java代码用于实现图 6-1所给出的设计思路,将其空缺处填充完整并编译运行,输出结果为:
Ellipse
Circle
Ellipse
C
E
【Java代码】
(1) class Shape{
public Shape(String name){
this.name= name;
}
(2) void paint();
String getName(){
retum this.name;
}
final String name;
};
//Box 和Line类似下面 Ellipse,其代码略
class Ellipse (3) {
public Ellipse(String name){
super(name);
System.out.println("Ellipse");
}
Void paintO{∥绘制现状示意代码
System.out.println(getName0);
}
};
class Circle (4) {
public Circle(String name){
super(name);
System.out.println("Circle");
}
};
class Diagram{
private Shape shapes[]= new Shape[2];
public void drawAShape(Shape shape){
shape.paint();
}
void erase A Shape(Shape shape){
∥删除形状,代码略
}
void drawShapes(){
shapes*0+= new Circle("C”);
shapes[l]= new Ellipse("E");
for (int i=O; i<2;++i) {
drawAShap(shapes[i]);//绘制形状
}
}
void close(){
for (int i=0;i<2; ++1) { []关闭图,删除所绘制图形
(5) ;
}
}
public static void main(String[] args){
Diagram diagram= (6) ;
diagram.drawShapes();
diagram.close();
}
}
第5题: