[说明]
下面程序定义了一个类Shape及其成员函数,然后从类Shape派生出类Point、类Circle、类Cylinder,以及它们的成员函数。
[Java程序]
(1) Shape
public abstract void printShapeName(); //纯虚函数。
public double area()return 0.0;
public double volumn()return 0.0;
class Point extends Shape
private double x.y;
public Point (double a, double b)x=a; y=b;
public void setPoint (double a,double b)x=a;y=b;
final public double getX() return x;
final public double getY()return y;
public void printShapeName()
(2) ;
class Circle extends Point
private double radius;
public Circle(double r, double a, double b)
(3) ;
radius=r>0 r:0;
public void setRadius (double r)
radius=r>0 r:0;
public double getRadius () return radius;
public double area()return 3.14259 * radius * radius;
public void printshapeName ()
System.out.print ("circle: ") ;
;
;
class Cylinder (4)
private double height;
public Cylinder(double h, double r, double x, double y)
super (r, x, y) ;
height = h>0 h:0;
public void setHeight (double h)
height = h>0 h:0;
public double area () //计算表面积
return (5) ;
public double volumn ()
double r=super.getRadius () ;
return 3.14159 * r * r * height;
public void printShapeName ()
System. out .print ("cylinder: ") ;
参考答案:2*Circle::area()+2*3.14159*Circle::getRadius()*height
解析: 本题以Java语言为载体,考查面向对象的对象设计中的几个重要概念,继承和抽象类。
本程序的功能是通过一个公共接口printShapeName()来-打印不同的图形的名称。试题中共定义了4个类,Shape、Point、Circle和Cylinder(圆柱),在完成本试题时,一个重要的环节是确定这4个类之间的继承关系。
首先,类Shape中有抽象函数printShapeName(),也有非抽象函数,故空(1)应填abstract class;
其次,由Shape派生出了Point,空(2)要求给出printShapeName()的实现体:打印图形的名称,即System.out.print("Point:")。
空(3)考查基类及继承方式,由于类Circle继承自类Point,而Point类没有默认的构造函数,故在Circle类的构造函数中必须在第一个语句用super引用调用基类构造函数,故空(3)应填super(a,b)。
同样的情况,类Cylinder的构造函数中的一个语句调用super(r,x,y),故类Cylinder应该继承自类Circle,故空(4)应填入extends Circle。
空(5)考查对基类成员函数的调用,应填入2*Circle::area()+2*3.14159*Circle::getRadius()*height。