java使用继承机制比较图形类

计算长方形 正方形 圆形的周长和面积 并比较两个图形面积的大小

1.Circle圆类

public class Circle extends Graph{
	private double radius;
	private double PI;
	private double Area;
	private double Girth;
	
	public Circle(){		
	}	
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}
	public double getPI() {
		return PI;
	}
	public void setPI(double pI) {
		PI = pI;
	}
	public double getArea() {
		return Area;
	}
	public void setArea(double area) {
		Area = area;
	}
	public double getGirth() {
		return Girth;
	}
	public void setGirth(double girth) {
		Girth = girth;
	}
	
	public Circle(double radius,double PI){
		this.radius=radius;
		this.PI=PI;
		this.Area=Area(radius,PI);
		this.Girth=Girth(radius,PI);
	}
	
	public double Area(double radius, double PI) {
		return radius*radius*PI;
	}
	
	public double Girth(double radius, double PI) {
		return 2*PI*radius;
	}
 
	@Override
	public String toString() {	
		String str="圆的面积为"+Area+",周长为"+Girth;
		return str;
	}
	
}

  1. Square正方形类
public class Square extends Graph{
 
	private double side_length;
	private double Area;
	private double Girth;
	
	public Square(){
		
	}
	public double getSide_length() {
		return side_length;
	}


	public void setSide_length(double side_length) {
		this.side_length = side_length;
	}


	public double getArea() {
		return Area;
	}


	public void setArea(double area) {
		Area = area;
	}


	public double getGirth() {
		return Girth;
	}


	public void setGirth(double girth) {
		Girth = girth;
	}


	public Square(double side_length){
		this.side_length=side_length;
		this.Area=Area(side_length);
		this.Girth=Girth(side_length);
	}
	
	public double Area(double side_length) {
		return side_length*side_length;
	}
	
	public double Girth(double side_length) {
		return side_length*4;
	}
 
	@Override
	public String toString() {
		String str="正方形的面积为"+Area+",周长为"+Girth;	
		return str;
	}
}
  1. Rectangle 长方形类
public class Rectangle extends Graph{
	
	private double width;
	private double height;
	private double Area;
	private double Girth;
	
	public Rectangle(){
		
	}
    public double getWidth() {
		return width;
	}
	public void setWidth(double width) {
		this.width = width;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public double getArea() {
		return Area;
	}
	public void setArea(double area) {
		Area = area;
	}
	public double getGirth() {
		return Girth;
	}
	public void setGirth(double girth) {
		Girth = girth;
	}
	public Rectangle (double width, double height){
		this.width=width;
		this.height=height;
		this.Area=Area(width,height);
		this.Girth=Girth(width,height);
	}
	
	public double Area(double width, double height) {
		return width*height;
	}
	
	public double Girth(double width, double height) {
		return (width+height)*2;
	}
 
	@Override
	public String toString() {
		String str="长方形矩面积为"+Area+",周长为"+Girth;
		
		return str;
	}
}

4.Graph 继承 / 父类

public abstract class Graph {
	
	// 获取面积
	public abstract double getArea();
	// 获取周长
	public abstract double getGirth();
	// 打印图形信息
	public abstract String toString();	
}

5.Complarable 接口 用于比较

public interface Comparable {
	// 比较两个图形面积大小
	public int CompareTo(Graph A,Graph B);
	// 找出面积最大的图形
	public String CompareTo(Graph[] graph_Obj);
	
}

6.Complarable_Impl 使用接口的方法


public class Comparable_Impl implements Comparable{
	
	@Override
	public String CompareTo(Graph[] g) {
		double ss;
		double max=0.0;
		String index="?";
		String a="[";
		for(int i=0;i<g.length;i++){
			ss=g[i].getArea();
			max=max>ss?max:ss;
			if(max==ss)
				index=Integer.toString(1+i);
			a+=" ("+Integer.toString(1+i)+"."+g[i].getClass().toString().split("ic.")[1]+")"+Double.toString(ss)+"\n";
		}
		a+=" ]\n当前第"+index+"个图形面积最大,它的面积为"+Double.toString(max);
		return a;
	}
 
	@Override
	public int CompareTo(Graph A, Graph B) {
		int reeult=-2;
		if(A.getArea()>B.getArea()){
			reeult=1;
		}
		if(A.getArea()==B.getArea()){
			reeult=0;
		}
		if(A.getArea()<B.getArea()){
			reeult=-1;
		}
		return reeult;
	}
}	

7.TestGraph 计算面积周长

public class TestGraph {
	public static double PI=3.14;
	public static void main(String[] args) {
		// 实例化图形对象
		Graph c1=new Circle(3.0,PI);
		Graph s1=new Square(4.0);
		Graph s2=new Rectangle(10.0,5.0);
		// 打印对象信息
		System.out.println(c1.toString());
		System.out.println(s1.toString());
		System.out.println(s2.toString());

}
	}
  1. TestGraph2 比较面积大小
public class TestGraphs {
		public static void main(String[] args) {
			double PI=TestGraph.PI; // test_1的static PI=3.14
			// 绘制图形对象
			Circle c1=new Circle(4.5,PI);
			Square s1=new Square(4.0);
			Rectangle s2=new Rectangle(10.0,5.0);
			
			// 实例化
			Comparable_Impl Ci=new Comparable_Impl();
			
			// 比较两个图形面积的大小
			int see=Ci.CompareTo(c1, s1);//c1为圆  s2 为正方形
			if(see==1){
				System.out.println("圆的面积较大");
			}else if(see==0){
				System.out.println("两个面积等大");
			}else if(see==-1){
				System.out.println("正方形较大");
			}
			
			System.out.println("\n");
			
		//(2)计算面积最大的图形
			Graph[] graph={ 
						c1,
						new Circle(3.0,4.0),
						s1,
						new Rectangle(3.0,5.0),
						s2,
						new Square(8.0)
					};
			System.out.println(Ci.CompareTo(graph));
			
		}
}

猜你喜欢

转载自blog.csdn.net/qq_41072487/article/details/101604726