定义一个抽象类,计算图形的面积和周长

(1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
①抽象图形类中有方法获取图形面积、获取图形周长等;
②使用构造方法为其成员属性赋初值;
③根据文字描述合理设计类的其他成员属性和方法。

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

Calculate.java

public abstract class Calculate implements Comparable{
	/*
	 * 定义抽象方法
	 */
	public abstract double Perimeter();//周长
	public abstract double area();//面积
	@Override
	public int compareTo(Calculate calculate) {
		//重写compareTo方法
				if(this.area()>calculate.area()){
					return 1;
				}else if(this.area()<calculate.area()){
					return -1;
				}else{
					return 0;
				}
	}
}

Circle.java

public class Circle extends Calculate{
	private double radius;
	public Circle(double radius){
		super();
		this.radius=radius;
	}
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}
	//重写Calculate中的方法
	@Override
	public double Perimeter(){
		return 2*radius*Math.PI;
	}
	@Override
	public double area(){
		return radius*radius*Math.PI;
	}
}

Square.java

public class Square extends Calculate{
	private double a;
	public Square(double a){
		super();
		this.a=a;
	}
	pulic double getA() {
		return a;
	}
	public void setA(double a) {
		this.a = a;
	}
	@Override
	public double Perimeter(){
		return 4*a;
	}
	@Override
	public double area(){
		return a*a;
	}
}

Rectangle.java

public class Rectangle extends Calculate{
	private double height;
	private double width;
	public Rectangle(double height,double width){
		super();
		this.height=height;
		this.width=width;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public double getWidth() {
		return width;
	}
	public void setWidth(double width) {
		this.width = width;
	}
	@Override
	public double Perimeter(){
		return 2*(height+width);
	}
	@Override
	public double area(){
		return height*width;
	}
}

TestCalculate.java

public class TestCalculate {
	public static void main(String[] args){
		//使用多态的形式实例化抽象类
		Calculate c1=new Square(5.0);
		Calculate c2=new Circle(3.0);
		Calculate c3=new Rectangle(2.0,3.0);
		
		System.out.println("正方形的周长是"+c1.Perimeter());
		System.out.println("正方形的面积是"+c1.area());
		
		System.out.println("圆形的周长是"+c2.Perimeter());
		System.out.println("圆形的面积是"+c2.area());
				
		System.out.println("长方形的面积是"+c3.Perimeter());
		System.out.println("长方形的面积是"+c3.area());
		
	}

}

Comparable.java

public interface Comparable {
	public int compareTo(Calculate calculate);
}

TestCalculates.java

public class TestCalculates {
	public static void main(String[] args){
		//实例化图形对象数组
		Calculate[] cal=new Calculate[10];
		for(int i=0;i<3;i++){
			Circle c=new Circle(2.0+i);
			cal[i]=c;
		}
		for(int i=3;i<7;i++){
			Square s=new Square(3.0+i);
			cal[i]=s;
			
		}
		for(int i=7;i<10;i++){
			Rectangle r=new Rectangle(3.0+i,4.0+i);
			cal[i]=r;
			
		}
		
		Calculate max=cal[0];
		for(int i=0;i<cal.length;i++){
			if(cal[i].area()>max.area()){
				max=cal[i];
			}
		}
		System.out.println(max.area());
		
	}

}
好的,您可以按照以下步骤使用抽象类计算图形周长面积: 1. 定义一个抽象类`Shape`,它包含两个抽象方法`getArea()`和`getPerimeter()`,分别用于计算图形面积周长; 2. 在`Shape`类定义一个`name`属性,用于表示图形的名称; 3. 定义三个具体的类`Square`、`Rectangle`和`Circle`,它们继承于`Shape`类,并实现`getArea()`和`getPerimeter()`方法,分别用于计算正方形、长方形和圆形的面积周长; 4. 在`Square`、`Rectangle`和`Circle`类重写`Shape`类的`name`属性,分别赋值为"正方形"、"长方形"和"圆形"。 以下是代码示例: ```java abstract class Shape { protected String name; public Shape(String name) { this.name = name; } public abstract double getArea(); public abstract double getPerimeter(); } class Square extends Shape { private double side; public Square(double side) { super("正方形"); this.side = side; } public double getArea() { return side * side; } public double getPerimeter() { return 4 * side; } } class Rectangle extends Shape { private double length; private double width; public Rectangle(double length, double width) { super("长方形"); this.length = length; this.width = width; } public double getArea() { return length * width; } public double getPerimeter() { return 2 * (length + width); } } class Circle extends Shape { private double radius; public Circle(double radius) { super("圆形"); this.radius = radius; } public double getArea() { return Math.PI * radius * radius; } public double getPerimeter() { return 2 * Math.PI * radius; } } public class Main { public static void main(String[] args) { Shape square = new Square(5); System.out.println(square.name + "的面积为:" + square.getArea()); System.out.println(square.name + "的周长为:" + square.getPerimeter()); Shape rectangle = new Rectangle(3, 4); System.out.println(rectangle.name + "的面积为:" + rectangle.getArea()); System.out.println(rectangle.name + "的周长为:" + rectangle.getPerimeter()); Shape circle = new Circle(2); System.out.println(circle.name + "的面积为:" + circle.getArea()); System.out.println(circle.name + "的周长为:" + circle.getPerimeter()); } } ``` 在这个程序,`Shape`类是抽象类,它包含了`name`属性和两个抽象方法`getArea()`和`getPerimeter()`。`Square`、`Rectangle`和`Circle`类继承于`Shape`类,并实现了`getArea()`和`getPerimeter()`方法。在`Square`、`Rectangle`和`Circle`类重写了`Shape`类的`name`属性。在`Main`类,通过实例化`Square`、`Rectangle`和`Circle`类,分别计算了它们的面积周长,并输出结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值