(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());
}
}