实现抽象基类图形类,派生类圆形类、正方形类、长方形类,求三个对象的面积和周长且比较面积大小

要求:
在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。
1、编写Java程序。
(1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
①抽象图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取图形周长等;
②使用构造方法为其成员属性赋初值;
③在每个派生类中都重写toString()方法,返回所有属性的信息;
④根据文字描述合理设计类的其他成员属性和方法。
(2)设计实现画板类,要求:
①画一个红色、无填充、长和宽分别为10.0与5.0的长方形;
②画一个绿色、有填充、半径为3.0的圆形;
③画一个黄色、无填充、边长为4.0的正方形;
④分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。

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

package com.work;
//图形
public abstract class Shape implements Comparable {
private String Color;
private boolean Fill;

public abstract double area();

public abstract double perimeter();

public String getColor(){
	return Color;
}
public void setColor(String Color){
	this.Color=Color;
}
public boolean getFill(){
	return Fill;
}
public void setFill(Boolean Fill){
	this.Fill=Fill;
}

public int comparaTo(Shape a){
	int i = 0;
	if(this.area()>a.area()){
		i=1;
	}else if(this.area()<a.area()){
		i=-1;
	}else if(this.area()==a.area()){
		i=0;
	}
	return i;
}
}

package com.work;
//正方形
public class Square extends Shape{
	private double side;
	public Square( double side){
		this.side=side;		
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return side*side;
	}
	@Override
	public double perimeter() {
		// TODO Auto-generated method stub
		return 4*side;
	}
	public String toString(){
		return "边长="+side;
	}
	@Override
	public int compareTo(Shape a) {
		// TODO Auto-generated method stub
		return 0;
	}
	
}

package com.work;
//长方形
public class Rectangle extends Shape{
	private double lenght;
	private double width;
	//使用构造方法为成员变量赋初值
	public Rectangle(double lenght,double width){		
		this.lenght=lenght;
		this.width=width;
	}	
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return lenght*width;
	}
	@Override
	public double perimeter() {
		return 2*(lenght+width);
		// TODO Auto-generated method stub
		
	}
	public String toString(){
		return "高度="+lenght+",宽度="+width;
	}
	@Override
	public int compareTo(Shape a) {
		// TODO Auto-generated method stub
		return 0;
	}
	
	}




package com.work;
//圆形
public class Circular extends Shape{
	private double r;
	public Circular(double r){
		super();
		this.r=r;
	}

	@Override
	public double area() {
		return Math.PI*r*r;
		// TODO Auto-generated method stub				
	}

	@Override
	public double perimeter() {
		return 2*Math.PI*r;
		// TODO Auto-generated method stub				
	}
	public String toString(){
		return "半径为="+r;
	}

	@Override
	public int compareTo(Shape a) {
		// TODO Auto-generated method stub
		return 0;
	}

}

package com.work;



public class mainClass {

	public static void main(String args[]){
		
//		使用多态实现实例化
//		 Shape circle=new Circular(3);
//		 Shape rectangle=new Rectangle(5, 10);
//		 Shape square=new Square(4);
		
		Rectangle r=new Rectangle(5, 10);
		System.out.println(r);		
		System.out.println("长方形的面积:"+r.area());
		System.out.println("长方形的周长:"+r.perimeter());
		
		Circular c=new Circular(3);
		System.out.println(c);		
		System.out.println("圆形的面积:"+c.area());
		System.out.println("圆形的周长:"+c.perimeter());
		
		Square s=new Square(4);
		System.out.println(s);		
		System.out.println("正方形的面积:"+s.area());
		System.out.println("正方形的周长:"+s.perimeter());
		
		
		Shape[] Sha=new Shape[6];
		for(int i=0;i<2;i++){
			Circular c1=new Circular(3.0+i);
			Sha[i]=c1;
		}
		for(int i=2;i<4;i++){
			Square s1=new Square(4.0+i);
			Sha[i]=s1;
		}
		for(int i=4;i<6;i++){
			Rectangle r1=new Rectangle(5.0+i,10.0+i);
			Sha[i]=r1;
		}
		Shape max=Sha[0];
		for(int i=0;i<Sha.length;i++){
			if(max.comparaTo(Sha[i])==-1){
				max=Sha[i];
			}
		}
		/*for(int i=0;i<Sha.length;i++){
			if(Sha[i].area()>max.area()){
					max=Sha[i];	 
			}			
		}*/
		System.out.println("最大面积为"+max.area());
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值