继承与多态

继承与多态

任务:(继承与多态)设计一个Shape类,该类无数据成员,函数成员:getArea()、getPerimeter()分别获得图形的面积(0)、周长(0),由此派生Circle类、Rectangle类并重写上述2个方法。然后设计实现GeoArrayList有序图形列表类(升序)数据成员自定(可以使用ArrayList<>),该类可以实现以ArryLsit为参数的构造方法及无参构造方法,向GeoArrayList添加对象方法insertGeoShape(Shape)(要求加入后不影响原有升序关系)、reMove(Sahpe)方法删除图形对象、getIndex(Shape)得到对象在列表的位置、get(index)读指定位置的对象、Size()返回列表长度、Clear()清空列表、Contains(Shape)判断图形是否在列表中、displayGeoList()依次显示列表中的所有对象的面积及对象的类别名称,GeoArrayList列表的升序以面积大小判断。设计主类:定义2个数组一个圆数组、一个矩形数组,然后将这两个数组添加到一个GeoArrayList对象中,然后显示列表中的所有对象。
代码:
shape类

package MyWorks;

public class Shape {
	public double getArea() {
		return 0;
	}

	public double getPerimeter() {
		return 0;
	}
}

Circle类:

package MyWorks;

public class Circle extends Shape {
	public double radius;
    public Circle(double r) {
    	radius = r;
    }
	public double getArea() {
		return this.radius * this.radius * Math.PI;
	}
	
	public double getPerimeter()
	{
		return this.radius*Math.PI*2;
	}
}

Rectangle类:

package MyWorks;

public class Rectangle extends Shape{
  public double height,width;
  public Rectangle(double h,double w) {
	  height = h;
	  width =w;
  }
  public double getArea()
  {
	  return this.height*this.width;
  }
  public double getPerimeter()
  {
	  return 2*(this.height+this.width);
  }
}

GeoArrayList类:

package MyWorks;

import java.util.*;

public class GeoArrayList {
	public ArrayList<Shape> array = new ArrayList<Shape>();

//	向GeoArrayList添加对象方法insertGeoShape(Shape)(要求加入后不影响原有升序关系)
	public void insertGeoShape(Shape s) {
		array.add(s);
		Collections.sort(array, new Comparator<Shape>() {
			public int compare(Shape a, Shape b) {
				return a.getArea() > b.getArea() ? 1 : -1;
			}
		});
	}

//	reMove(Shape)方法删除图形对象
	public void reMove(Shape s) {
		array.remove(s);

	}

//	getIndex(Shape)得到对象在列表的位置
	public int getIndex(Shape s) {
		return array.indexOf(s);
	}

//	get(index)读指定位置的对象
	public Shape get(int index) {
		return array.get(index);
	}

//	Size()返回列表长度
	public int Size() {
		return array.size();
	}

// Clear()清空列表
	public void Clear() {
		array.clear();
	}

//	Contains(Shape)判断图形是否在列表中
	public boolean Contains(Shape s) {
		if (array.contains(s))
			return true;
		else
			return false;
	}

//	displayGeoList()依次显示列表中的所有对象的面积及对象的类别名称
	public void displayGeoList() {
		for (int i = 0; i < array.size(); i++) {
			System.out.println(array.get(i).getArea() + " " + array.get(i).getClass().getName());
		}
	}

//	GeoArrayList列表的升序以面积大小判断
	public GeoArrayList(ArrayList<Shape> array) {
		this.array = array;
		Collections.sort(array, new Comparator<Shape>() {
			public int compare(Shape a, Shape b) {
				return a.getArea() > b.getArea() ? 1 : -1;
			}
		});
	}
	public GeoArrayList() {
		
	}

}

主类

package MyWorks;

public class myMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Circle[] circle = { new Circle(1), new Circle(2), new Circle(3) };
		Rectangle[] rect = { new Rectangle(1, 2), new Rectangle(2, 3) };
        GeoArrayList geo = new GeoArrayList();
        for(Circle c:circle) {
        	geo.insertGeoShape(c);
        }
        for(Rectangle r:rect) {
        	geo.insertGeoShape(r);
        }
        geo.displayGeoList();
        
	}

}

运行截图:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林笙10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值