Java 接口及接口回调_Chris
2024-10-20 13:34:29
题目:
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
代码:
1、Test.java
/**
* 测试类,包含一个主方法;
* 调用求体积方法输出;
*/
package cn.edu.ccut.object3; import java.util.Scanner;
public class Test { public static void main(String[] args) {
char c;
while(true){
System.out.println("请输入柱体底的形状('j'矩形、's'三角形、'z'正方形、't'梯形、'y'圆形、'F'结束程序):");
Scanner reader = new Scanner(System.in);
c = reader.next().charAt(0); //c接受字符型输入;
if(c == 'F'){ //退出程序标志;
System.out.println("程序结束!");
break;
}
factory f = new factory();
Cone cone = new Cone(f.ctrl_di(c) , 5); //定义矩形对象,根据用户输出控制底,高为5;
System.out.println("柱体体积是:"+cone.getV());
}
} }
2、factory.java
/**
* 工厂类,实现简单工厂模式,包含一个方法;
* ctrl_di实现了根据用户输入换底;
*/
package cn.edu.ccut.object3; public class factory {
Shape shape = null;
public Shape ctrl_di(char c){ //实现了根据用户输入换底;
switch(c){
case 'j':shape = new Rec(3,4);break;
case 's':shape = new Triangle(3,4,5);break;
case 'z':shape = new Zheng(2);break;
case 't':shape = new Trapezoid(4,6,7);break;
case 'y':shape = new Circle(3);break;
default:System.out.println("error");
}
return shape;
}
}
3、Shape.java
/**
* 图形接口;
* 定义了一个计算面积的抽象方法getArea;
*/
package cn.edu.ccut.object3; public interface Shape {
public double getArea(); //抽象方法计算面积;
}
4、Rec.java
/**
* 矩形类,使用了图形接口,包含两个成员变量一个构造方法,并重写了getArea方法;
* 两个成员变量分别代表举行的长和宽;
* 构造方法初始化,getArea计算面积;
*/
package cn.edu.ccut.object3; public class Rec implements Shape {
double a;
double b;
Rec(double a , double b){
this.a = a;
this.b = b;
}
public double getArea(){
return (a*b);
}
}
5、Zheng.java
/**
* 正方形类,继承了矩形类,包含两个方法;
* 构造方法初始化,getArea计算面积
*/
package cn.edu.ccut.object3; public class Zheng extends Rec {
Zheng(double a){
super(a, a); //利用super调用父类构造方法;
} public double getArea(){ //方法重写;
return (a*a);
}
}
6、Circle.java
/**
* 圆类,使用了图形接口,包含一个成员变量,两个方法;
* 成员变量r为半径;
* 构造方法初始化,重写了getArea方法;
*/
package cn.edu.ccut.object3; public class Circle implements Shape{
double r; public Circle(double r){
this.r = r;
}
public double getArea(){
return (Math.PI*r*r);
}
}
7、Triangle.java
/**
* 三角形类,使用了图形接口,包含了三个成员变量,两个方法;
* 成员变量a,b,c分别代表三角形的三个边;
* 构造方法初始化,重写了getArea方法;
*/
package cn.edu.ccut.object3; public class Triangle implements Shape{
double a;
double b;
double c; public Triangle (double a , double b , double c){
this.a = a;
this.b = b;
this.c = c;
}
public double getArea(){
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
}
8、Trapezoid.java
/**
* 梯形类,使用了图形接口,包含三个成员变量,两个方法;
* 成员变量a,b代表梯形的上底和下底,high代表高;
* 构造方法,重写getArea;
*/
package cn.edu.ccut.object3; public class Trapezoid implements Shape{
double a;
double b;
double high; public Trapezoid(double a , double b , double high){
this.a = a;
this.b = b;
this.high = high;
}
public double getArea(){
return (((a + b) * high) / 2);
}
}
9、Cone.java
/**
* 柱体类,两个成员变量,三个方法;
* 成员变量shape代表底,high代表高;
* 构造方法初始化,getV计算柱体体积,setDi可用于换底;
*/
package cn.edu.ccut.object3; public class Cone {
Shape shape;
double high;
public Cone(Shape shape , double high){
this.shape = shape;
this.high = high;
}
public double getV(){
return (shape.getArea()*high);
}
public void setDi(Shape shape){ //利用修改器换底
this.shape = shape;
}
}
运行结果:
最新文章
- 最近在玩linux时 yum 遇到了问题
- SQLSERVER单表CRUD通用方法
- Vagrant入门
- 解决:error: Cannot fetch repo (TypeError: expected string or buffer)
- jq实现 按钮点击一次后 3秒后在可点击
- ANT 环境搭建
- HDU 2289 CUP 二分
- Html5新标签解释及用法
- 一个IO的传奇一生 系列 存储之道
- 详解Android动画之Frame Animation
- Traffic Lights - SGU 103(最短路)
- 颜色rgb
- jQuery Ajax: $.post请求示例
- asp.net网站管理工具 遇到错误。请返回上一页并重试。
- Monggodb基础
- nginx 卸载后重新安装/etc/nginx配置文件没了,cannot open /etc/nginx/nginx.conf (No such file or directory)
- Jumpserver 介绍
- spring @Bean注解解释
- python 百度图片爬虫
- [面试]CVTE 2019提前批 Windows应用开发一面
热门文章
- HDU3394 Railway 题解(边双连通分量)
- Spring中常见的设计模式——模板模式
- Pandas 数据分析,高中体测练习
- 到底如何配置 maven 编译插件的 JDK 版本
- window 10 安装Oracle odac 64位
- 2019 牛客国庆集训day1 2019 点分治
- Python工具类(一)—— 操作Mysql数据库
- ES.01.Elasticsearch安装配置
- python 快速创建字典 fromkes()
- 修改现有消息类让.net core项目支持Protobuf - 【无需使用 [ProtoBuf.ProtoContract] 的方法】