根据周长计算不同形状图形的面积,详细要求如下:
1.计算多种图形的面积,并比较各种图形面积的最大值。
2.使用抽象类及其子类的方式实现本案例
3.本案例以圆形和正方形为例。
注:正方形的面积公式为:0.0625*c*c。圆形的面积公式为:0.0796*c*c,其中,c表示图形的周长。
分析问题中的描述,可以得出如下解决方案:
1.定义两个类Square和Circle,分别表示正方形和圆形。
2.正方形和圆形都有周长,我们可以使用c属性来表示;要计算正方形和圆形的面积,我们定义area方法来实现。即,分别在Square类和Circle类中定义c属性和area方法,并根据各自图形的公式计算对应的面积。
3.案例问题中要求计算各种图形的面积,并找出最大值。在此,我们需要找到一种类型,该类型为Square类和Circle类的父类,使用该类型的数组来存储所有图形。因此,定义Shape类,该类为Square和Circle类的父类,并将Square类和Circle类的共有属性放入Shape类中定义。
4.又因为父类(Shape)的引用不能直接调用子类(Square和Circle)的方法(area方法),因此,将area方法抽取到父类Shape中。在父类Shape中,不知道具体是那种图形,因此area方法不知如何实现,在此,将该方法定义抽象方法,那么Shape类也要定义为抽象类。这样,也形成了(Square或Circle)重写父类(Shape)的area方法。
5.最后,我们就可以定义如下方法来实现求面积的最大值:
public static void maxArea(Shape[] shapes){
Shape s0=shapes[0];
double max=s0.area();
int maxIndex=0;
for(int i=1;imax){
max=area;
maxIndex=1;
}
}
System.out.println("数组中索引为"+maxIndex+"的图形的面积最大面积为:"+max);
}
以上方法中,参数shapes为Shape[]数组类型,该参数中可以存储正方形、圆形、或是其它图形。
实现此案例需要按照如下步骤进行。
定义两个类Square和Circle,分别表示正方形和圆形,Square类代码如下所示:
public class Square{
}
Circle类代码如下所示;
public class Circle{
}
分别在Square类和Circle类中定义c属性和area方法,并根据各自图形的公式计算对应的面积,Square类代码如下所示:
public class Square{
private double c;
public Square(double c){
this.c=c;
}
/**
*计算正方形的面积
*/
public double area(){
return 0.0625*c*c;
}
}
Circle类代码如下所示:
public class Circle{
private double c;
public Circle(double c){
this.c=c;
}
/**
*计算圆形的面积
*/
public double area(){
return 0.0796*c*c;
}
}
定义父类Shape,将子类Square和Circle中共有属性c和方法area抽取到父类Shape中,并重构Square类和Circle类,Shape类代码如下所示:
public abstract class Shape{
protected double c;
public abstract double area();
}
Square类代码如下所示:
public class Square extends Shape{
public Square(double c){
this.c=c;
}
/**
*计算正方形的面积
*/
public double area(){
return 0.0625*c*c;
}
}
Circle类代码如下所示:
public class Circle extends Shape{
public Circle(double c){
this.c=c;
}
/**
*计算圆形的面积
*/
public double area(){
return 0.0796*c*c;
}
}
新建类TestShape,在该类中新建方法maxArea方法,该方法实现计算多种图形面积的最大值,代码如下所示:
public class TestShape{
public static void maxArea(Shape[] shapes){
double max=shapes[0].area();
int maxIndex=0;
for(int i=1;imax){
max=area;
maxIndex=i;
}
}
System.out.println("数组中索引为"+maxIndex+"的图形的面积最大,面积为:"+max);
}
}
在TestShape类中,测试maxArea方法能否计算出各种图形面积的最大值,代码如下所示:
public class TestShape{
public static void main(String[] args){
Shape[] shapes=new Shape[2];
shapes[0]=new Circle(4);数组中的第一个元素为圆形对象,周长为4
shapes[1]=new Square(4);数组中第二个元素为正方形对象,周长为4
maxArea(shapes);
}
public static void maxArea(Shape[] shapes){
double max=shapes[0].area();
int maxIndex=0;
for(int i=1;imax){
max=area;
maxIndex=i;
}
}
System.out.println("数组中索引为"+maxIndex+"的图形的面积最大,面积为:"+max);
}
}
运行TestShape类,控制台输出结果如下所示:
数组中索引为0的图形的面积最大,面积为:1.2736
观察上述输出结果,可以看出,shapes[0]表示的是圆形,周长相同的情况下,圆形的面积更大些。
扫描关注我吧,获取学习视频