第九次作业-接口及接口回调

题目:

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

代码:

Shape.java

/*创建接口

求面积方法*/

package com;
public interface Shape {
     double getArea();
}

JuXing.java

/*定义成员变量 

   创建构造方法JuXing()

   重写接口中求面积方法。*/

/*定义成员变量,创建构造方法JuXing()和重写接口中求面积方法。*/
package com;
public class JuXing implements Shape{
    double length;
    double width;
    public JuXing(double length,double width){
        this.length=length;
        this.width=width;
    }
    @Override
    public double getArea() {
        double area=length*width;
        return area;
    }

}

Zfx.java

/* 继承矩形

创建有参构造方法Zfx()

重写求面积方法*/

package com;

public class Zfx extends JuXing {
    public Zfx(double side){
        super(side,side);
    }
    @Override
    public double getArea() {
        double area=width*width;
        return area;
    }

}

Triangle.java

/*定义三个表示三边的成员变量

创建有参构造方法

重写实现求面积方法*/

package com;
public class Triangle implements Shape {
    double a,b,c;
    public Triangle(double a,double b,double c){//创建有参构造方法
        this.a=a;
        this.b=b;
        this.c=c;
    }
    @Override
    public double getArea() {
        double C=(a+b+c)/2;
        double area=Math.sqrt(C*(C-a)*(C-b)*(C-c));//面积公式
        return area;
    }

}

TX.java

/*定义三个成员变量表示上底下底和高
创建有参构造方法
重写实现求面积方法*/

package com;
public class TX implements Shape {
    double ShangD,XiaD,high;
    public TX(double ShangD,double XiaD,double high){
        this.ShangD=ShangD;
        this.XiaD=XiaD;
        this.high=high;
    }
    @Override
    public double getArea() {
        double area=(ShangD+XiaD)*high/2;
        return area;
    }

}

Circle.java

/*定义两个成员变量r,PI
创建有参构造方法
重写实现求面积方法*/

package com;
public class Circle implements Shape {
    double r;
    double PI=3.14;
    public Circle(double r){
        this.r=r;
    }
    @Override
    public double getArea() {
        double area=PI*r*r;
        return area;
    }

}

Factory.java

/*创建Xz()方法

 运用switch()选择底面形状*/

package com;
public class Factory {
     static Shape shape=null;
     public static Shape Xz(char c){
         switch(c){ 
         case 'j':
             System.out.println("长方形为底的体积:");
             shape=new JuXing(6,1);break;
         case 'z':
             System.out.println("正方形为底的体积:");
             shape=new Zfx(6);break;
         case 's':
             System.out.println("三角形为底的体积:");
             shape=new Triangle(3,4,5);break;
         case 't':
             System.out.println("梯形为底的体积:");
             shape=new TX(6,1,3);break;
         case 'y':
             System.out.println("圆为底的体积:");
             shape=new Circle(6);break;
         }
        return shape;
     }
}

Test.java

/*进行输入操作
创建f和cone对象
判断程序是否退出
cone对象调用求体积方法,输出其返回值*/

package com;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        System.out.println("请选择底面形状:");
        System.out.println("j:矩形;  z:正方形  ;s:三角形; t:梯形 ;y:圆形");
        while(true){
        Scanner reader=new Scanner(System.in);//进行键盘输入
        char c=reader.next().charAt(0);//接收字符
        if(c=='T'){
            System.out.println("退出");
            return;
        }
        Factory f=new Factory();
        Cone cone=new Cone(f.Xz(c),9);
        System.out.println(cone.getV());//输出体积
        
        }
    }
}

测试运行结果:

 

posted @ 2019-10-07 13:18  李李李同學  阅读(177)  评论(0编辑  收藏  举报