[说明]
以下程序的功能是计算三角形、矩形和正方形的面积并输出,程序由5个类组成:AreaTest是主类,类Trianlge、Rectangle和Square分别表示三角形、矩形和正方形,抽象类Figure提供了一个计算面积的抽象方法。
[程序]
public class AreaTest
public static void main(String args [])
Figure [] figures= new Triangle (2,3,3) ,new Rectangle (5,8) ,new Square (5) ;
for (int i=0; 1< figures .length; i++)
System. out .println (figures [i] +"area=" +figures [i]. getArea ());
public abstract class Figure
public abstract double getArea() ;
public class Rectangle extends (1)
double height;
double width;
public Rectangle(double height, double width)
this .height=height;
this.width=width;
public String toString ()
return "Rectangle: height= "+height+" , width= "+width+":";
public double getArea ()
return (2) ;
class Square extends (3)
public Square(double width)
(4) ;
public string toString ()
return "Square: width= "+width+" : " ;
class Triangle extends (5)
double la;
double lb;
double lc;
public Triangle(double la,double lb, double lc)
this.la=la; this.lb=lb; this.lc=lc;
public String toString()
return "Triangle : sides= "+la+" , "+lb+" , " +lc+" : " ;
public double getArea ()
double s= (la+lb+lc)/2.0;
return Math. sqrt (s* (s-la) * (s-lb) * (s-lc)) ;
参考答案:Figure
解析: 本题考查的是Java面向对象程序设计中继承、抽象类的概念和应用。
由题意可知,题中程序的功能是计算不同图形的面积。题中已指明类Figure是抽象类,所以Figure只能作为基类。因此,空(1)处应填:Figure。分析一下程序可知,类Rectangle直接继承类Figure,将实现Figure中的抽象方法getArea(),长方形的面积是长×宽,显然,空(2)处应填:height*width。空(3)处填的是类Square的直接父类的类名,类Figure和类Rectangle均有可能是类Square的直接父类,仔细研究一下程序可发现,类Square没有给出方法getArea()的新的定义,所以Figure不可能是其直接父类,因此空(3)处应填Rectangle。空(4)处是计算正方形的面积,显然此处是要调用其父类的getArea()方法,类Rectangle中的getArea()方法需两个参数,故需将正方形的边长分别赋值给长方形的长和宽,此时还需借助Java中super函数,利用super函数可将类Square中的width传递给Rectangle中的height和width,所以空(4)处应填:super(width,width)。空(5)处应填类Triangle的直接父类的类名,程序中类Triangle已给出getArea()的新的定义,故Triangle的直接父类是Figureo所以空(5)处应填:Figureo经如上分析后,四个类的继承关系便很显然了。类Figure.类Rectangle、类Square、类Triangle的继承关系如图6-1所示。
考生在解答此类题型时,应搞清楚类的继承关系,这是题目的难点,也是关键点。继承关系可从抽象类、方法的实现等角度来判断。