在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的

1、编写Java程序。
(1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
①抽象图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取图形周长等;
②使用构造方法为其成员属性赋初值;
③在每个派生类中都重写toString()方法,返回所有属性的信息;
④根据文字描述合理设计类的其他成员属性和方法。
(2)设计实现画板类,要求:
①画一个红色、无填充、长和宽分别为10.0与5.0的长方形;
②画一个绿色、有填充、半径为3.0的圆形;
③画一个黄色、无填充、边长为4.0的正方形;
④分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。
抽象类:Graph.java

public abstract class Graph {
	private String colour;
	private boolean fill;
	public abstract double area();
	public abstract double perimeter();
	public Graph(String colour,boolean fill){
		this.colour=colour;
		this.fill=fill;
	}
	public abstract String toString();
	public String getColour() {
		return colour;
	}
	public void setColour(String colour) {
		this.colour = colour;
	}
	public boolean isFill() {
		return fill;
	}
	public void setFill(boolean fill) {
		this.fill = fill;
	}
	
}

Rectangle.java

public class Rectangle extends Graph{
	private double length;
	private double width;
	public Rectangle(String colour, boolean fill,double width,double length) {
		super(colour, fill);
		this.length=length;
		this.width=width;
	}

	@Override
	public double area() {
	//这里可以不定义变量,直接返回 return length*width;
		double area;
		area=length*width;
		return area;
	}

	@Override
	public double perimeter() {
		double perimeter;
		perimeter=length*2+width*2;
		return perimeter;
	}

	@Override
	public String toString() {
		
		return "长方形的边框颜色是:"+getColour()+"\t有无填充:"+isFill()+"\t高为为:"+length+"\t宽为:"+width+"\t周长为:"+perimeter()+"\t面积为:"+area();
	}

}

Rundness.java

public class Roundness extends Graph{
	private double R;
	public Roundness(String colour, boolean fill,double R) {
		super(colour, fill);
		this.R=R;
		
	}

	@Override
	public double area() {
		double area;
		area=R*R*Math.PI;
		return area;
	}

	@Override
	public double perimeter() {
		double perimeret;
		perimeret=2*R*Math.PI;
		return perimeret;
	}
	public String toString(){
		return "圆形的边框颜色是:"+getColour()+"\t有无填充:"+isFill()+"\t半径为:"+R+"\t周长为:"+perimeter()+"\t面积为:"+area();
		
	}
}

Square.java

public class Square extends Graph{
	private double length;
	public Square(String colour, boolean fill,double length) {
		super(colour, fill);
		this.length=length;
	}

	@Override
	public double area() {
		double area;
		area=length*length;
		return area;
	}

	@Override
	public double perimeter() {
		double perimeter;
		perimeter=length*4;
		return perimeter;
	}
	public String toString(){
		return "正方形的边框颜色是:"+getColour()+"\t有无填充:"+isFill()+"\t边长为:"+length+"\t周长为:"+perimeter()+"\t面积为:"+area();
		
	}
}

Main.java

public class Main {

	public static void main(String[] args) {
		Roundness Run=new Roundness("greed",true,3);
		System.out.println(Run.toString());
		Square square=new Square("yellow",false,4);
		System.out.println(square.toString());
		Rectangle rectangle=new Rectangle("red",false,10,5);
		System.out.println(rectangle.toString());
	}

}

2、基于上题背景,设计实现以下程序:
(1)设计Comparable接口,接口中设计compareTo()方法,用来比较对象。此方法的返回值类型设计为int类型。此方法接收一个参数,参数类型为图形类。
(2)在图形类中实现compareTo()方法,用来比较两个图形的面积大小。
(3)在测试类中,创建图形类的数组,数组中存放多个圆形、正方形、长方形对象,使用compareTo()方法找出数组中面积最大的图形。
提示:比较对象时,可以将compareTo()方法的返回值设置为1、0、-1,来代表比较结果,当前对象大、两者相等或者当前对象小。再次提醒,此题涉及的代码全部展示在此题的题号下,与上一题相独立。

public abstract class Graph implements Comparable{
	private String colour;
	private boolean fill;
	public abstract double area();
	public abstract double perimeter();
	public Graph(String colour,boolean fill){
		this.colour=colour;
		this.fill=fill;
	}
	public abstract String toString();
	public int compareTo(Graph graph){
		if(this.area()>graph.area()){
			return 1;
		}else if(this.area()<graph.area()){
			return -1;
		}else{
			return 0;
		}
	}
	
	
	
	public String getColour() {
		return colour;
	}
	public boolean isFill() {
		return fill;
	}
	
	
}

public interface Comparable {
	public int compareTo(Graph graph);
}

public class Main {

	public static void main(String[] args) {

		Graph[] graph=new Graph[10];
		for(int i=0;i<3;i++){
			Roundness rou=new Roundness("红色",true,2+i);
			graph[i]=rou;
		}
		for(int i=3;i<7;i++){
			Square square=new Square("黄色",true,3+i);
			graph[i]=square;
		}
		for(int i=7;i<10;i++){
			Rectangle rectangle=new Rectangle("绿色",false,3+i,2+i);
			graph[i]=rectangle;
		}
		Graph max=graph[0];
		for(int i=0;i<graph.length;i++){
			if(max.compareTo(graph[i])==-1){
				max=graph[i];
			}
		}
		System.out.println(max);
	}

}

有修改的就这两个类和增加一个接口

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值