第9次作业--接口及接口回调
-
题目
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
-
源程序
Main.java
1 /** 2 * 1.文件功能:接受一个字符判断选择柱体的底,输入柱体的高,输出柱体面积 3 * 2.成员变量:无 4 * 3.方法:主方法 5 */ 6 import java.util.*; 7 8 public class Main { 9 10 public static void main(String[] args) { 11 Scanner in = new Scanner(System.in); 12 System.out.println("选择作为底的图形 'a' 矩形 'b' 正方形 'c' 梯形 'd' 圆形:"); 13 14 String s = in.next(); 15 char judge = s.charAt(0); 16 17 Factory fac = new Factory(); 18 Shape rec = fac.getdi(judge); 19 20 System.out.println("请输入柱体的高:"); 21 ZhuTi zhu = new ZhuTi(rec, in.nextDouble()); 22 23 System.out.println("柱体的体积是:" + zhu.getVolume()); 24 } 25 26 }
Shape.java
1 /** 2 * 1.文件功能:定义接口Shape类 3 * 2.成员变量:无 4 * 3.方法:方法头 getArea() 5 */ 6 public interface Shape { 7 double getArea(); 8 }
Factory.java
1 /** 2 * 1.文件功能:接收一个字符判断创建相应对象,赋值,并返回对象的引用 3 * 2.成员变量:无 4 * 3.方法:getdi功能就是文件功能 5 */ 6 import java.util.*; 7 8 public class Factory { 9 10 public Shape getdi(char judge) { 11 12 Scanner in = new Scanner(System.in); 13 14 switch (judge) { 15 case 'a': 16 System.out.println("请输入矩形的长和宽"); 17 Rectangle di_1 = new Rectangle(in.nextDouble(), in.nextDouble()); 18 return di_1; 19 case 'b': 20 System.out.println("请输入正方形的边"); 21 Square di_2 = new Square(in.nextDouble()); 22 return di_2; 23 case 'c': 24 System.out.println("请输入梯形形的上底、下底和高"); 25 Trapezoid di_3 = new Trapezoid(in.nextDouble(),in.nextDouble(),in.nextDouble()); 26 return di_3; 27 case 'd': 28 System.out.println("请输入圆形的半径"); 29 Cricle di_4 = new Cricle(in.nextDouble()); 30 return di_4; 31 default : 32 System.out.println("请重新开始并输入正确的字符"); 33 System.exit(0); 34 return null; 35 } 36 37 38 } 39 40 }
Rectangle.java
1 /** 2 * 1.文件功能:实现接口Shape求矩形的面积 3 * 2.成员变量:width宽 length长 area面积 4 * 3.方法:构造方法Rectangle给成员变量赋值 getArea()返回矩形面积 5 */ 6 public class Rectangle implements Shape{ 7 double width; 8 double length; 9 double area; 10 11 Rectangle(double width, double length) { 12 this.length = length; 13 this.width = width; 14 area = length * width; 15 } 16 17 public double getArea() { 18 return area; 19 } 20 21 }
Square.java
1 /** 2 * 1.文件功能:继承Rectangle 求正方形面积 3 * 2.成员变量:无 4 * 3.方法:构造方法Square给成员变量赋值 getArea()返回正方形面积 5 */ 6 public class Square extends Rectangle { 7 Square(double side) { 8 super(side, side); 9 } 10 11 public double getArea() { 12 return length * length; 13 } 14 }
Trapezoid.java
1 /** 2 * 1.文件功能:实现接口Shape求梯形的面积 3 * 2.成员变量:height高 top上底 bottom下底 4 * 3.方法:构造方法Trapezoid给成员变量赋值 getArea()返回梯形面积 5 */ 6 public class Trapezoid implements Shape { 7 double height; 8 double top; 9 double bottom; 10 11 Trapezoid(double top, double bottom, double height) { 12 this.bottom = bottom; 13 this.height = height; 14 this.top = top; 15 } 16 17 public double getArea() { 18 return (top + bottom) * height / 2; 19 } 20 21 }
Cricle.java
1 /** 2 * 1.文件功能:实现接口Shape求圆的面积 3 * 2.成员变量:r 圆的半径 4 * 3.方法:构造方法Cricle给r赋值,getArea求圆的面积 5 */ 6 public class Cricle implements Shape { 7 double r; 8 9 Cricle(double r) { 10 this.r = r; 11 } 12 13 public double getArea() { 14 return Math.PI * r * r; 15 } 16 17 }
ZhuTi.java
1 /** 2 * 1.文件功能:接受底边对象求柱体体积 3 * 2.成员变量:height高 rec Shape接口变量 4 * 3.方法:构造方法ZhuTi给成员变量赋值 getVolume返回柱体体积 changeDi改变rec的引用的对象 5 */ 6 public class ZhuTi { 7 double height; 8 Shape rec; 9 10 ZhuTi(Shape rec, double height) { 11 this.rec = rec; 12 this.height = height; 13 } 14 15 double getVolume() { 16 return rec.getArea() * height; 17 } 18 19 void changeDi(Rectangle rec) { 20 this.rec = rec; 21 22 } 23 24 }
-
运行结果






浙公网安备 33010602011771号