Java 接口及接口回调_Chris
题目:
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
代码:
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的更多相关文章
- java学习之接口、多态和内部类
接口是一组行为的规范.定义.接口是面向对象编程体系中的思想精髓之一,使用接口可以让我们的程序更加利于变化. 接口的格式: interface 接口名称{ 全局变量: 抽象方法: } 接口中的成员修饰符 ...
- Java NIO Path接口和Files类配合操作文件
Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...
- 和我一起学Effective Java之类和接口
类和接口 使类和成员的可访问性最小 信息隐藏(information hiding)/封装(encapsulation):隐藏模块内部数据和其他实现细节,通过API和其他模块通信,不知道其他模块的内部 ...
- Java 多态(接口)
有两种意义的多态,一是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同(方法重载).另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为(方 ...
- Java 调用http接口(基于OkHttp的Http工具类方法示例)
目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...
- Java中的接口是怎么实现的
接口 使用关键字interface来定义一个接口,和类的定义方法很相似分为接口声明和接口体. interface Printable { final int MAX = 100; void add( ...
- Java的Future接口
Java的Future接口 Java 中的 Future 接口和其实现类 FutureTask,代表了异步计算的结果. 1. Future接口简介 Future 是异步计算结果的容器接口,它提供了下面 ...
- 【转】java通用URL接口地址调用方式GET和POST方式
java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...
- java中的接口interface
关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...
随机推荐
- delphi7 如何描述窗体上的全部控件
在delphi开发中,经常需要用到窗体中控件的name名来进行对象方法或属性的调用,所以如何对delphi窗体进行简洁,清楚,完整的描述就很重要.最好能不看界面也能进行界面编码,具体如下表所示: xx ...
- Oracle基础之保留字和关键字
Oracle基础之保留字和关键字 在Oracle之中,有分为保留字和关键字,所谓关键字就是Oracle中有实际意义的,而保留字(比如DESC.ORDER等等)是Oracle中不能随便使用的,比如不能随 ...
- A*算法知识讲解
- 【C_Language】---一份程序看懂C程序printf()的几种常用用法
闲来继续巩固我的学习之路,今天略微整理了一下,C程序中Printf()的一些常用用法,虽然自己以前好像会,但是不够系统,今天大致整理了一些,先贴上来看看,以后在看到其他,继续补充,希望能帮到一些像我一 ...
- dp - 循环数组的最大和
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...
- 字符串分类 - hash
链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 题目描述 Eddy likes to play with string which is a s ...
- Airtest入门篇
Airtest是啥? 简单理解:基于图像识别的UI自动化测试框架 俗人理解:截图即可完成自动化测试 适用场景:游戏.APP.PC软件,支持Window.Android.IOS Airtest官方文档 ...
- Pyhon语法字符集报错
pyhton对语法的字符集,特别的敏感因此我们在写python代码特别要注意.以下代码是个人在学习python中遇见的错误 附:错代码截图1-1 从以上代码中可以看到,似乎代码没有什么问题接下来验证一 ...
- Python基础————文件操作
文件操作 4.1 文件基本操作 obj = open('路径',mode='模式',encoding='编码') # 表示要干嘛 读 还是写 obj.write() #写什么内容 obj.read() ...
- python 黏包现象
一.黏包 1.tcp有黏包现象 表现两种情况 发送的数据过小且下面还有一个发送数据,这两个数据会一起发送 发送的数据过大,超过最大缓存空间,超出的部分在下一次发送的时候发送 原因: tcp是面向流的, ...