Java 接口及接口回调_Chris

题目:

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

代码:

1、Test.java

 1 /**
 2  * 测试类,包含一个主方法;
 3  * 调用求体积方法输出;
 4  */
 5 package cn.edu.ccut.object3;
 6
 7 import java.util.Scanner;
 8 public class Test {
 9
10     public static void main(String[] args) {
11         char c;
12         while(true){
13             System.out.println("请输入柱体底的形状(‘j‘矩形、‘s‘三角形、‘z‘正方形、‘t‘梯形、‘y‘圆形、‘F‘结束程序):");
14             Scanner reader = new Scanner(System.in);
15             c = reader.next().charAt(0); //c接受字符型输入;
16             if(c == ‘F‘){     //退出程序标志;
17                 System.out.println("程序结束!");
18                 break;
19             }
20             factory f = new factory();
21             Cone cone = new Cone(f.ctrl_di(c) , 5); //定义矩形对象,根据用户输出控制底,高为5;
22             System.out.println("柱体体积是:"+cone.getV());
23         }
24     }
25
26 }

2、factory.java

 1 /**
 2  * 工厂类,实现简单工厂模式,包含一个方法;
 3  * ctrl_di实现了根据用户输入换底;
 4  */
 5 package cn.edu.ccut.object3;
 6
 7 public class factory {
 8     Shape shape = null;
 9     public Shape ctrl_di(char c){ //实现了根据用户输入换底;
10         switch(c){
11         case ‘j‘:shape = new Rec(3,4);break;
12         case ‘s‘:shape = new Triangle(3,4,5);break;
13         case ‘z‘:shape = new Zheng(2);break;
14         case ‘t‘:shape = new Trapezoid(4,6,7);break;
15         case ‘y‘:shape = new Circle(3);break;
16         default:System.out.println("error");
17         }
18         return shape;
19     }
20 }

3、Shape.java

1 /**
2  * 图形接口;
3  * 定义了一个计算面积的抽象方法getArea;
4  */
5 package cn.edu.ccut.object3;
6
7 public interface  Shape {
8     public double getArea(); //抽象方法计算面积;
9 }

4、Rec.java

 1 /**
 2  * 矩形类,使用了图形接口,包含两个成员变量一个构造方法,并重写了getArea方法;
 3  * 两个成员变量分别代表举行的长和宽;
 4  * 构造方法初始化,getArea计算面积;
 5  */
 6 package cn.edu.ccut.object3;
 7
 8 public class Rec implements Shape {
 9     double a;
10     double b;
11     Rec(double a , double b){
12         this.a = a;
13         this.b = b;
14     }
15     public double getArea(){
16         return (a*b);
17     }
18 }

5、Zheng.java

 1 /**
 2  * 正方形类,继承了矩形类,包含两个方法;
 3  * 构造方法初始化,getArea计算面积
 4  */
 5 package cn.edu.ccut.object3;
 6
 7 public class Zheng extends Rec {
 8     Zheng(double a){
 9         super(a, a); //利用super调用父类构造方法;
10     }
11
12     public double getArea(){ //方法重写;
13         return (a*a);
14     }
15 }

6、Circle.java

 1 /**
 2  * 圆类,使用了图形接口,包含一个成员变量,两个方法;
 3  * 成员变量r为半径;
 4  * 构造方法初始化,重写了getArea方法;
 5  */
 6 package cn.edu.ccut.object3;
 7
 8 public class Circle implements Shape{
 9     double r;
10
11     public Circle(double r){
12         this.r = r;
13     }
14     public double getArea(){
15         return (Math.PI*r*r);
16     }
17 }

7、Triangle.java

 1 /**
 2  * 三角形类,使用了图形接口,包含了三个成员变量,两个方法;
 3  * 成员变量a,b,c分别代表三角形的三个边;
 4  * 构造方法初始化,重写了getArea方法;
 5  */
 6 package cn.edu.ccut.object3;
 7
 8 public class Triangle implements Shape{
 9     double a;
10     double b;
11     double c;
12
13     public Triangle (double a , double b , double c){
14         this.a = a;
15         this.b = b;
16         this.c = c;
17     }
18     public double getArea(){
19         double p = (a + b + c) / 2;
20         return Math.sqrt(p * (p - a) * (p - b) * (p - c));
21     }
22 }

8、Trapezoid.java

 1 /**
 2  * 梯形类,使用了图形接口,包含三个成员变量,两个方法;
 3  * 成员变量a,b代表梯形的上底和下底,high代表高;
 4  * 构造方法,重写getArea;
 5  */
 6 package cn.edu.ccut.object3;
 7
 8 public class Trapezoid implements Shape{
 9     double a;
10     double b;
11     double high;
12
13     public Trapezoid(double a , double b , double high){
14         this.a = a;
15         this.b = b;
16         this.high = high;
17     }
18     public double getArea(){
19         return (((a + b) * high) / 2);
20     }
21 }

9、Cone.java

 1 /**
 2  * 柱体类,两个成员变量,三个方法;
 3  * 成员变量shape代表底,high代表高;
 4  * 构造方法初始化,getV计算柱体体积,setDi可用于换底;
 5  */
 6 package cn.edu.ccut.object3;
 7
 8 public class Cone {
 9     Shape shape;
10     double high;
11     public Cone(Shape shape , double high){
12         this.shape = shape;
13         this.high = high;
14     }
15     public double getV(){
16         return (shape.getArea()*high);
17     }
18     public void setDi(Shape shape){ //利用修改器换底
19         this.shape = shape;
20     }
21 }

运行结果:

原文地址:https://www.cnblogs.com/chris-wang/p/11620316.html

时间: 2024-07-31 01:52:20

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

【juincen】Java中的接口interface类比js中的回调函数

前几天在左讯飞语音的时候,无意间意识到java中的接口和js中常用的回调函数有点类似,今天在这儿整理一下思路. interface,Java中的接口,为什么会有这个东西. 一,预留声明 比如两个程序员A和B,A要写一段程序,其中需要调用到B写的程序.这时候A可以写一个接口: public interface Demo{ void deal(); } A要调用的方法先“预留声明”在接口里:deal 然后B去完善这个接口,B写了一个实现类实现了这个Demo接口. A在自己的业务逻辑里面只用调用接口的

java抽象类和接口

1.抽象类 抽象类在概念上描述的是抽象世界,抽象类刻画了公有行为的特征,并且通过继承机制传送给它的派生类.抽象类使用关键字abstract 修饰,语法如下: abstract class 类名{ 类体; } 抽象方法是指在抽象类中某些成员方法没有具体的实现,只有方法声明.抽象方法使用关键字abstract 修饰,格式如下: public abstract 返回类型 方法名([参数列表]); 抽象类和抽象方法的具体规则如下: 1.用abstract 关键字修饰一个类时,该类叫做抽象类,用abstr

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

接口是一组行为的规范.定义.接口是面向对象编程体系中的思想精髓之一,使用接口可以让我们的程序更加利于变化. 接口的格式: interface 接口名称{ 全局变量: 抽象方法: } 接口中的成员修饰符是固定的,成员常量用public static  final修饰:成员函数用public  abstract修饰,接口的出现将“多继承”通过多实现来体现.接口的使用也有一定的规则:接口可以继承多个接口,一个类中可以实现接口和多接口,抽象类实现接口可以不实现方法:接口中的所有实现方法的访问权限都是pu

Java面向对象程序设计--接口和内部类

1.接口的定义: In the Java programming language, an interface is not a class but a set of requirements for classes that want to conform the interface. 说明: 1) Interface 不是class,虽然interface具有class的一些特点,例如能够继承,能够定义相同类型的变量,而且和C++的abstract class非常像,但Java 的inter

牛刀小试 - 详解Java中的接口与内部类的使用

一.接口 接口的理解 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现: 也就是说,接口自身自提供方法的基本声明,而不提供方法体:接口中声明的方法只能被实现该接口的子类所具体实现. 接口是Java中另一种非常重要的结构.因为Java不支持多继承,某种程度来说这也造成了一定的局限性. 所以接口允许多实现的特点弥补了类不能多继承的缺点.通常通过继承和接口的双重设计,可以既保持类的数据安全也变相实现了多继承. 接口的特点 使用关键字"interface&quo

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

java的List接口的实现类 ArrayList,LinkedList,Vector 的区别

Java的List接口有3个实现类,分别是ArrayList.LinkedList.Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复. 3个具体实现类的区别如下: 1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制.移动.代价比较高.因此,它

老白的JAVA课程13 接口

之前我们讲到了java4大特征的最后一个抽象的特征,其实在抽象这个特征里面,我们还有一个特征-接口,今天我们就来学一学接口.  用电脑,手机等电子产品来比喻接口,可以更好的理解,比如用符合接口的插头就可以了.  接口具有很好的扩展性,方便.  接口的由来   例子:奥拓奥迪都是汽车,汽车的维护都是可以用调节引擎和更换汽油的方法,那么奥拓和奥迪也都可以:但是有了更多的维护对象以后,比如说大货车,卡车等等,其他的对象不一定需要每一步维护,或者都不需要维护:又比如不同枪支有不同特性的例子.  因此,我

12、Java中的接口

接口:初期理解,可以认为是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示.class用于定义类interface 用于定义接口. 接口定义时,格式特点:1,接口中常见定义:常量,抽象方法.2,接口中的成员都有固定修饰符. 常量:public static final 方法:public abstract 记住:接口中的成员都是public的. 接口:是不可以创建对象的,因为有抽象方法.需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化.否则子类是一