用接口实现 话不多说,上代码
接口
public interface AreaShow {
// 展示当前信息
void show();
// 面积 要有返回值
double area();
}
圆类
/*
* 圆类 实现了 面积 展示方法
* 属性 半径
* 周长 2πr
* 面积: π*r*r
* */
public class Circle implements AreaShow{
private double r;//半径
@Override
public void show() {
System.out.println("该圆半径为:" + r + "直径为:" + (r * 2) + "周长为:" + (2 * Math.PI * r) + "面积为:" + this.area());
}
@Override
public double area() {
return Math.PI * r * r;
}
// 构造方法
public Circle() {
}
public Circle(double r) {
this.r = r;
}
//get set
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
圆柱类
/*
* 圆柱类
* 半径 高
* 圆柱周长公式 2πR(半径)
2.圆柱面积公式 2 πR^2+ 2πRh(高度)
*
* */
public class Clinder implements AreaShow{
private double h;//高
private double r;//半径
@Override
public void show() {
System.out.println("该圆柱高为:" + h + "半径为:" + r + "周长为:" + (2*Math.PI*r) + "面积为:"+ this.area());
}
@Override
public double area() {
return 2 * Math.PI * r * r + 2 * Math.PI * r * h;
}
// 构造方法
public Clinder() {
}
public Clinder(double h, double r) {
this.h = h;
this.r = r;
}
//get set 方法
public double getH() {
return h;
}
public void setH(double h) {
this.h = h;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
长方体类
/*
* 长方体 类’
* 长 宽 高
* 周长 (长 + 宽 + 高)* 4
* 高 长 * 宽 * 高
* */
public class Cube implements AreaShow{
private double length;
private double weigth;
private double heigth;
@Override
public void show() {
System.out.println("该立方体的长为:" + length + "宽为:" + weigth + "高为:" + heigth + "周长为:" + ((length + weigth + heigth) * 4) + "面积为:" + this.area());
}
//
@Override
public double area() {
// System.out.println("该面积为:" + (length * weigth * heigth));
return length * weigth * heigth;
}
// 构造方法
public Cube() {
}
public Cube(double length, double weigth, double heigth) {
this.length = length;
this.weigth = weigth;
this.heigth = heigth;
}
//getset
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWeigth() {
return weigth;
}
public void setWeigth(double weigth) {
this.weigth = weigth;
}
public double getHeigth() {
return heigth;
}
public void setHeigth(double heigth) {
this.heigth = heigth;
}
//
}
矩形类
/*
* 矩形类
* */
public class Rectangle implements AreaShow{
private double length;//长
private double wide;//宽
// 展示周长
@Override
public void show() {
System.out.println("该矩形长:" + length + "宽为:" + wide + "周长:" + (length + wide) * 2 + "面积为:" + this.area());
}
// 展示面积
@Override
public double area() {
// System.out.println("改矩形面积为:" + (length * wide));
return length * wide;
}
// 构造方法
public Rectangle() {
}
public Rectangle(double length, double wide) {
this.length = length;
this.wide = wide;
}
//get set
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWide() {
return wide;
}
public void setWide(double wide) {
this.wide = wide;
}
}
测试类:
import java.util.ArrayList;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
// 创建集合
ArrayList<Object> arrs = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("***图形管理系统***");
System.out.println("----------------");
System.out.println("1.创建一个圆");
System.out.println("2.创建一个矩形");
System.out.println("3.创建一个长方体");
System.out.println("4.创建一个圆柱体");
System.out.println("5.显示已经创建的图形");
System.out.println("6.求个图形的面积之和");
System.out.println("7.退出系统");
System.out.println("请输入要实现的数字(0-7)");
int choice = sc.nextInt();
switch (choice){
case 1:
// System.out.println("创建元");
createCircle(arrs,sc);
System.out.println("添加圆形成功!!");
break;
case 2:
// System.out.println("创建矩形");
createRectangle(arrs,sc);
System.out.println("添加矩形成功!!");
break;
case 3:
// System.out.println("长方体");
createCube(arrs,sc);
System.out.println("添加长方体成功!!");
break;
case 4:
// System.out.println("创建圆柱体");
createClinder(arrs,sc);
System.out.println("添加圆柱成功");
break;
case 5:
// System.out.println("显示已经创建的图形");
showAll(arrs);
break;
case 6:
// System.out.println("求各个图形的面积和");
double sum = sumArea(arrs);
System.out.println("面积总和为:" + sum);
break;
case 7:
System.out.println("欢迎使用!");
System.exit(0);
default:
System.out.println("输入错误,请重新输入!");
}
}
}
// 创建圆
public static void createCircle(ArrayList arrayList,Scanner sc){
// 输入半径
System.out.println("请输入圆型的半径:");
double banjing = sc.nextDouble();
// 创建新的 圆对象
Circle circle = new Circle(banjing);
// 添加
arrayList.add(circle);
}
// 创建 矩形
public static void createRectangle(ArrayList arrayList,Scanner sc){
// 输入 长 和高
System.out.println("请输入长方形的长为:");
double chang = sc.nextDouble();
System.out.println("请输入长方形的宽为:");
double kuan = sc.nextDouble();
// 创建一个新的 矩形
Rectangle rectangle = new Rectangle(chang,kuan);
arrayList.add(rectangle);
}
// 添加长方体
public static void createCube(ArrayList arrayList,Scanner sc){
System.out.println("请输入长方体的长:");
double chang = sc.nextDouble();
System.out.println("请输入长方体的宽:");
double kuan = sc.nextDouble();
System.out.println("请输入长方体的高:");
double gao = sc.nextDouble();
Cube cube = new Cube(chang,kuan,gao);
arrayList.add(cube);
}
// 添加圆柱
public static void createClinder(ArrayList arrayList,Scanner sc){
// 半径 高
System.out.println("请输入该圆柱的半径:");
double banjing = sc.nextDouble();
System.out.println("请输入该圆柱的高:");
double gao = sc.nextDouble();
Clinder clinder = new Clinder(banjing,gao);
arrayList.add(clinder);
}
// 显示已经创建的图形
public static void showAll(ArrayList arr){
// 遍历 调用方法
for (int i = 0; i < arr.size(); i++) {
// 进行比较
if(arr.get(i) instanceof Circle){
// 如果等于 强转成 并 展示show
((Circle) arr.get(i)).show();
}else if(arr.get(i) instanceof Rectangle){
((Rectangle) arr.get(i)).show();
}else if(arr.get(i) instanceof Cube){
((Cube) arr.get(i)).show();
}else if(arr.get(i) instanceof Clinder){
((Clinder) arr.get(i)).show();
}else {
return;
}
}
}
// 求 总面积和
public static double sumArea(ArrayList arr){
double sum = 0;
for (int i = 0; i < arr.size(); i++) {
// arr.get(i).show()
// 判断圆形 Circle 再调用方法
if(arr.get(i) instanceof Circle){
// 强转成
double areaCircle = ((Circle) arr.get(i)).area();
sum += areaCircle;
// 矩形
}else if(arr.get(i) instanceof Rectangle){
double areaRectangle = ((Rectangle) arr.get(i)).area();
sum += areaRectangle;
// 长方体
}else if(arr.get(i) instanceof Cube){
double areaCube = ((Cube) arr.get(i)).area();
sum += areaCube;
// 圆柱
}else if(arr.get(i) instanceof Clinder){
double areaClinder = ((Clinder) arr.get(i)).area();
sum += areaClinder;
}
}
return sum;
}
}
此题有好多地方可以优化 比如 小数Math.PI ....
有要修改的地方 可以评论哦