编写程序,实现图形类的继承,并定义相应类对象并进行测试。
- 类Shape,无属性,有一个返回0.0的求图形面积的公有方法
public double getArea();//求图形面积
- 类Circle,继承自Shape,有一个私有实型的属性radius(半径),重写父类继承来的求面积方法,求圆的面积
- 类Rectangle,继承自Shape,有两个私有实型属性width和length,重写父类继承来的求面积方法,求矩形的面积
- 类Ball,继承自Circle,其属性从父类继承,重写父类求面积方法,求球表面积,此外,定义一求球体积的方法
public double getVolume();//求球体积
- 类Box,继承自Rectangle,除从父类继承的属性外,再定义一个属性height,重写父类继承来的求面积方法,求立方体表面积,此外,定义一求立方体体积的方法
public double getVolume();//求立方体体积
- 注意:
- 每个类均有构造方法,且构造方法内必须输出如下内容:
Constructing 类名
- 每个类属性均为私有,且必须有getter和setter方法(可用Eclipse自动生成)
- 输出的数值均保留两位小数
主方法内,主要实现四个功能(1-4):
从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积;
从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积;
从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积;
从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;
假如数据输入非法(包括圆、矩形、球及立方体对象的属性不大于0和输入选择值非1-4),系统输出Wrong Format
输入格式:
共四种合法输入
- 1 圆半径
- 2 矩形宽、长
- 3 球半径
- 4 立方体宽、长、高
输出格式:
按照以上需求提示依次输出
输入样例1:
在这里给出一组输入。例如:
1 1.0
输出样例1:
在这里给出相应的输出。例如:
Constructing Shape
Constructing Circle
Circle's area:3.14
输入样例2:
在这里给出一组输入。例如:
4 3.6 2.1 0.01211
输出样例2:
在这里给出相应的输出。例如:
Constructing Shape
Constructing Rectangle
Constructing Box
Box's surface area:15.26
Box's volume:0.09
输入样例3:
在这里给出一组输入。例如:
2 -2.3 5.110
输出样例2:
在这里给出相应的输出。例如:
Wrong Format
参考代码:
import java.util.Scanner;
class Shape{
public Shape() {
System.out.println("Constructing Shape");
}
public double getArea() {
return 0.0;
}
}
class Circle extends Shape{
private double radius;
public Circle() {
System.out.println("Constructing Circle");
}
public void setRadius(double radius) {
this.radius=radius;
}
public double getArea() {
return Math.PI*radius*radius;
}
}
class Rectangle extends Shape{
private double width;
private double length;
public Rectangle() {
System.out.println("Constructing Rectangle");
}
public void setElement(double width,double length) {
this.width=width;
this.length=length;
}
public double getArea() {
return width*length;
}
}
class Ball extends Circle{
private double radius;
public Ball() {
System.out.println("Constructing Ball");
}
public void setRadius(double radius) {
this.radius=radius;
}
public double getArea() {
return 4.0*Math.PI*radius*radius;
}
public double getVolume() {
return 4.0/3.0*Math.PI*radius*radius*radius;
}
}
class Box extends Rectangle{
private double length;
private double width;
private double height;
public Box() {
System.out.println("Constructing Box");
}
public void setElements(double length,double width,double height) {
this.length=length;
this.width=width;
this.height=height;
}
public double getArea() {
return 2.0*(length*width+length*height+width*height);
}
public double getVolume() {
return length*width*height;
}
}
public class Main{
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int num=scan.nextInt();
if(num==1) {
double radius=scan.nextDouble();
if(radius<=0)System.out.println("Wrong Format");
else {
Circle circle=new Circle();
circle.setRadius(radius);
System.out.printf("Circle's area:%.2f\n",circle.getArea());
}}
else if(num==2) {
double length=scan.nextDouble();
double width=scan.nextDouble();
if(length<=0||width<=0)System.out.println("Wrong Format");
else {
Rectangle rectangle=new Rectangle();
rectangle.setElement(width,length);
System.out.printf("Rectangle's area:%.2f\n",rectangle.getArea());
}}
else if(num==3) {
double radius=scan.nextDouble();
if(radius<=0)System.out.println("Wrong Format");
else {
Ball ball=new Ball();
ball.setRadius(radius);
System.out.printf("Ball's surface area:%.2f\n",ball.getArea());
System.out.printf("Ball's volume:%.2f\n",ball.getVolume());
}}
else if(num==4) {
double length=scan.nextDouble();
double width=scan.nextDouble();
double height=scan.nextDouble();
if(length<=0||width<=0||height<=0)System.out.println("Wrong Format");
else {
Box box=new Box();
box.setElements(length,width,height);
System.out.printf("Box's surface area:%.2f\n",box.getArea());
System.out.printf("Box's volume:%.2f\n",box.getVolume());
}}
else {
System.out.println("Wrong Format");
}
}
}