题目:

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

代码:

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. js滑动导航栏点击后居中效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 26.python操作Excel

    写入Excel import xlwt book=xlwt.Workbook(encoding='utf-8') sheet=book.add_sheet('xiangxin') # 标题名 titl ...

  3. java高并发梳理

  4. a:visited不起作用的原因解析

    目前大多数的网站都很少会出现"一个超链接被点击后改变其颜色"的需求,但也还是有一部分网站有这样的实际需求,也是为了能够让用户更容易区分哪些标题是被点击访问过了,这类需求大多在新闻类 ...

  5. 开发一个简单的ip解析webservice接口,并用springmvc生成客户端调用

    1.创建webservice工程,这次先采用jax-ws框架,下次再尝试jax-rs(restful) 2.写个实现ip解析的类,接收传入的ip,并返回解析信息 3.Myeclipse——>Ne ...

  6. react入门(六):状态提升&context上下文小白速懂

    一.状态提升 使用 react 经常会遇到几个组件需要共用状态数据的情况.这种情况下,我们最好将这部分共享的状态提升至他们最近的父组件当中进行管理. 原理:父组件基于属性把自己的一个fn函数传递给子组 ...

  7. 图解kubernetes调度器ScheduleAlgorithm核心实现学习框架设计

    ScheduleAlgorithm是一个接口负责为pod选择一个合适的node节点,本节主要解析如何实现一个可扩展.可配置的通用算法框架来实现通用调度,如何进行算法的统一注册和构建,如何进行metad ...

  8. FNScanner二维码接口openView自定义扫码Demo

    本文出自APICloud官方论坛 FNScanner 模块是一个二维码/条形码扫描器,是 scanner 模块的优化升级版.在 iOS 平台上本模块底层集成了 Zbar 和系统自带的条形码/二维码分析 ...

  9. vue+bootstrap4+mybatis分页

    先看效果 Springboot+Mybatis+Pagehelper分页具体实现略. Controller返回数据 @GetMapping("/findByPage") publi ...

  10. eclipse开发工具内打开某js文件总是用记事本方式打开的问题

    问题现象: 开发时不知道按到了什么快捷键,导致在某js文件内点击某调用方法时莫名其妙的用记事本方式打开了该js文件,试了几次都是这样.索性将该js文件关掉重新打开,结果双击该文件还是弹出了一个记事本, ...