题目:

  利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。

代码:

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;
}
}

运行结果:

Java 接口及接口回调_Chris的更多相关文章

  1. java学习之接口、多态和内部类

    接口是一组行为的规范.定义.接口是面向对象编程体系中的思想精髓之一,使用接口可以让我们的程序更加利于变化. 接口的格式: interface 接口名称{ 全局变量: 抽象方法: } 接口中的成员修饰符 ...

  2. Java NIO Path接口和Files类配合操作文件

    Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...

  3. 和我一起学Effective Java之类和接口

    类和接口 使类和成员的可访问性最小 信息隐藏(information hiding)/封装(encapsulation):隐藏模块内部数据和其他实现细节,通过API和其他模块通信,不知道其他模块的内部 ...

  4. Java 多态(接口)

    有两种意义的多态,一是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同(方法重载).另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为(方 ...

  5. Java 调用http接口(基于OkHttp的Http工具类方法示例)

    目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...

  6. Java中的接口是怎么实现的

    接口 使用关键字interface来定义一个接口,和类的定义方法很相似分为接口声明和接口体. interface  Printable { final int MAX = 100; void add( ...

  7. Java的Future接口

    Java的Future接口 Java 中的 Future 接口和其实现类 FutureTask,代表了异步计算的结果. 1. Future接口简介 Future 是异步计算结果的容器接口,它提供了下面 ...

  8. 【转】java通用URL接口地址调用方式GET和POST方式

    java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...

  9. java中的接口interface

    关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...

随机推荐

  1. win设置C、D、E等盘符图标为自定义的图片

    1.选择一张jpg图片,在下面网站工具上,转为ico的图片(最好转64x64的清晰些). http://www.faviconico.org/favicon 2.在D盘下新建文本文件.txt,写入以下 ...

  2. postman 的基础使用篇(一)

    简介 postman 是接口协作开发的优秀平台,可以用来进行接口设计.构建和调试,之前以chrome插件的形式,现在也有原生APP. 安装 Native app 通过链接 download page  ...

  3. 小小知识点(四十八)——发送端已知CSI,基于预编码技术,进一步提高MIMO系统和用户的吞吐量

    1.预编码技术的概念 对于空间复用,LTE既支持开环方式的空间复用(发端未知CSI),也支持闭环方式的空间复用(发端已知CSI) 对于LTE中闭环方式的空间复用(即预编码系统)中,发射机可以根据信道条 ...

  4. 16.用pycharm导入自己写的模块时,import无法识别的解决办法

    我们用pycharm打开自己写的代码,当多个文件之间有相互依赖的关系的时候,import无法识别自己写的文件,但是我们写的文件又确实在同一个文件夹中, 这种问题可以用下面的方法解决: 1)打开File ...

  5. Android系统启动过程分析

    Android系统启动过程分析 一.Android平台架构 首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知. 可以看出整个架构由5部分 ...

  6. Could not find a version that satisfies the requirement numpy>=1.7.0 (from pan das==0.17.0) (from versions: ) No matching distribution found for numpy>=1.7.0 (from pandas==0.17.0)

    今天晚上一直在安装pandas,天杀的,真的是太难了.后来发现提示: Could not find a version that satisfies the requirement numpy> ...

  7. ThreadLocal = 本地线程?

    一.定义 ThreadLocal是JDK包提供的,从名字来看,ThreadLocal意思就是本地线程的意思. 1.1 是什么? 要想知道他是个啥,我们看看ThreadLocal的源码(基于JDK 1. ...

  8. 区间dp - 送外卖

    When we are focusing on solving problems, we usually prefer to stay in front of computers rather tha ...

  9. Iaas/paas/saas 三种模式分别都是做什么?

    任何一个在互联网上提供其服务的公司都可以叫做云计算公司.其实云计算分几层的,分别是Infrastructure(基础设施)-as-a- Service,Platform(平台)-as-a-Servic ...

  10. 2018徐州现场赛A

    题目链接:http://codeforces.com/gym/102012/problem/A 题目给出的算法跑出的数据是真的水 #include<iostream> #include&l ...