案例4-5:长方形和圆形都属于几何图形,都有周长和面积,并且它们都有自己的周长和面积计算公式。使用抽象类的知识设计一个程序,可以计算不同图形的面积和周长。
设计思路
-
抽象类
Graph
:Graph
是一个抽象类,目的是为具体的图形类(如长方形和圆形)提供一个统一的接口。- 在其中定义了两个抽象方法:
area()
和perimeter()
,这两个方法的实现将在具体的子类中定义。
-
具体类
Cfx
(长方形):- 继承自
Graph
,表示一个长方形。 - 包含两个私有成员变量
length
和width
,分别表示长方形的长度和宽度。 - 在构造函数中初始化这些属性,并实现
area()
和perimeter()
方法:area()
方法返回长方形的面积,计算公式为length * width
。perimeter()
方法返回长方形的周长,计算公式为2 * (length + width)
。
- 继承自
-
具体类
Yx
(圆形):- 同样继承自
Graph
,表示一个圆形。 - 包含一个私有成员变量
radius
,表示圆的半径。 - 在构造函数中初始化半径,并实现
area()
和perimeter()
方法:area()
方法返回圆的面积,采用公式Math.PI * radius * radius
。perimeter()
方法返回圆的周长,采用公式2 * Math.PI * radius
。
- 同样继承自
-
测试类
cx
:- 包含
main
方法,是程序的入口。 - 在
main
方法中创建了Cfx
(长方形)和Yx
(圆形)的实例。 - 使用这些实例调用
area()
和perimeter()
方法来计算面积和周长,并格式化输出结果。 - 使用
System.out.printf
方法使输出更美观,并控制小数点后显示的位数。
- 包含
package day0313;
abstract class Graph{
abstract double area();
abstract double perimeter();
}
class Cfx extends Graph {
private double length;
private double width;
public Cfx(double length, double width) {
this.length = length;
this.width = width;
}
double area() {
return length*width;
}
double perimeter() {
return 2*(length+width);
}
}
class Yx extends Graph{
private double radius;
public Yx(double radius) {
this.radius = radius;
}
double area() {
return Math.PI*radius*radius;
}
double perimeter() {
return 2*Math.PI*radius;
}
}
public class cx {
public static void main(String[] args) {
// TODO Auto-generated method stub
Graph c=new Cfx(7.0,2);
Graph y=new Yx(3);
System.out.printf("长方形面积:%.2f",c.area());
System.out.println();//换行
System.out.printf("长方形周长:%.2f",c.perimeter());
System.out.println();
System.out.println("圆形面积:"+y.area());
System.out.println("圆形周长:"+y.perimeter());
}
}