JAVA第六章:接口与实现

第六次上机实验

    • 1.按以下要求编写程序。
    • 2.定义接口Shape,其中包括两个方法size()、getInfo();,分别计算形状的大小和显示诸如:“半径为XXX的圆的面积为:”等提示信息;设计“直线”、“圆”、“三角形”和“矩形”类分别实现Shape接口。在测试类中通过语句:Shape s[] = new Shape [] ;创建一个包括“直线”、“圆”、 三角形”和“矩形”四个对象的对象数组,将各类图形的大小输出。

1.按以下要求编写程序。

(1)定义一个Shape接口,该接口中有一个常量PI,两个方法:getPerimeter()和getArea(),方法均无参数,返回值类型为double型;

package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 *
 */
public interface Shape {
	
	final double PI = 3.14159267;
	
	double getPerimeter();
	double getArea();
}

(2)定义一个圆类Circle,满足以下条件:

  1. Circle类实现Shape接口;
  2. 定义Circle类的成员变量r,表示圆的半径,数据类型为double;
  3. 定义Circle类的无参构造方法,输出“—接口测试程序—”;
  4. 定义Circle类的构造方法,参数名为r,用该参数初始化圆的半径,调用无参构造方法;
  5. 实现getPerimeter()方法,计算圆的周长;
  6. 实现getArea()方法,计算圆的面积。
package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 *
 */
public class Circle implements Shape {
	
	double r ;

	public double getR() {
		return r;
	}
	
	public Circle(double r) {
		this();
		this.r = r;
		
	}

	public Circle() {
		super();
		System.out.println("--------接口测试程序------");
	}

	@Override
	public double getPerimeter() {
		double p = 2*r*PI;
		return p;
	}

	@Override
	public double getArea() {
		double s = r*r*PI;
		return s;
	}

}

(3)编写一个测试类,类名为TestCircle,让用户输入圆的半径,利用Circle类计算该圆的周长和面积,

package cn.hygzs.demo6;

import java.util.Scanner;
/**
 * 
 * @author 湖云工作室
 *
 */
public class TestCircle {
   
	public static void main(String[] args) {
		System.out.println("请输入圆的半径:");
		Scanner input = new Scanner(System.in);
		double r = input.nextDouble();
		Circle c = new Circle(r);
		System.out.println("半径为"+r+"的圆的周长为"+c.getPerimeter());
		System.out.println("半径为"+r+"的圆的面积为"+c.getArea());

	}

}

2.定义接口Shape,其中包括两个方法size()、getInfo();,分别计算形状的大小和显示诸如:“半径为XXX的圆的面积为:”等提示信息;设计“直线”、“圆”、“三角形”和“矩形”类分别实现Shape接口。在测试类中通过语句:Shape s[] = new Shape [] ;创建一个包括“直线”、“圆”、 三角形”和“矩形”四个对象的对象数组,将各类图形的大小输出。

Shapes.java

package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 *
 */
public interface Shapes {
	void getInfo();
	void getInfo(Line l);
	double size();
	double size(Line l);

}

Line.java

package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 * 直线
 */
public class Line implements Shapes{
	
	double x;
	double y;

	public double getX() {
		return x;
	}

	public double getY() {
		return y;
	}
	public Line(double x, double y) {
		super();
		this.x = x;
		this.y = y;
	}
	
	@Override
	public double size() {
		// TODO Auto-generated method stub
		return 0;
	}
	@Override
	public double size(Line l) {		
		double sum =Math.sqrt((x-l.x) * (x-l.x) + (y-l.y) * (y-l.y) );
		return sum;
	}
	
	@Override
	public void getInfo() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void getInfo(Line l) {
		System.out.println("点("+x+","+y+ ")到点("+l.getX()+","+l.getY()+")长度为:"+size(l));	
		
	}
	
}

Circles.java

package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 * 圆形
 */
public class Circles implements Shapes {
	
	private double r;
	

	public double getR() {
		return r;
	}

	public void setR(double r) {
		this.r = r;
	}

	public Circles(double r) {
		super();
		this.r = r;
	}

	@Override
	public double size() {
		return 3.14*getR()*getR();
	}

	@Override
	public void getInfo() {
		System.out.println("半径为:"+getR()+"的圆面积为:"+size());	
		
	}

	@Override
	public double size(Line l) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void getInfo(Line l) {
		// TODO Auto-generated method stub
		
	}

}

Rectangles.java

package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 * 三角形
 */
public class Rectangles implements Shapes {
	
	 double sideA;
	 double sideB;
	 double sideC;
	 
	public Rectangles(double sideA, double sideB, double sideC) {
		super();
		this.sideA = sideA;
		this.sideB = sideB;
		this.sideC = sideC;
	}

	@Override
	public double size() {
		 double p=(sideA+sideB+sideC)/2.0;
		 double area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;
		 return area;
	}

	@Override
	public void getInfo() {
		System.out.println("边长为:"+sideA+","+sideB+","+sideC+"的三角形面积为:"+size());	
	}

	@Override
	public double size(Line l) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void getInfo(Line l) {
		// TODO Auto-generated method stub
		
	}


}

Triangles.java

package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 * 矩形
 */
public class Triangles implements Shapes {
    
	 private double a;
	 private double b;
	 
	public double getA() {
		return a;
	}

	public void setA(double a) {
		this.a = a;
	}

	public void setB(double b) {
		this.b = b;
	}

	public double getB() {
		return b;
	}

	public Triangles(double a, double b) {
		super();
		this.a = a;
		this.b = b;
	}

	@Override
	public double size() {
		return getA()*getB();
	}

	@Override
	public void getInfo() {
		System.out.println("长为:"+getA()+"高为:"+getB()+"的矩形面积为:"+size());	
	}

	@Override
	public double size(Line l) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void getInfo(Line l) {
		// TODO Auto-generated method stub
		
	}

}

Test.java

package cn.hygzs.demo6;
/**
 * 
 * @author 湖云工作室
 *
 */
public class Test {

	public static void main(String[] args) {
		  //定义对象数组 
		  Shapes s[] = new Shapes[4];  
		  s[0] = new Circles(47.0);	  
		  s[1] = new Triangles(3,4);
		  s[2] = new Rectangles(3,4,5);
		   s[3] = new Line(22.0,56.0);
		  Line l =  new Line(41.0,57.0);
		  //引用方法
		  s[3].getInfo(l);
		  s[0].getInfo();
		  s[2].getInfo();
		  s[1].getInfo();
		  

	}

}

你可能感兴趣的:(学习java,接口)