继承与多态

继承与多态

任务:(继承与多态)设计一个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();
        
	}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中的继承是面向对象编程中的一种重要概念,通过继承可以实现之间的父子关系,子可以继承的属性和方法。在继承关系中,子可以对父的方法进行重载和覆盖,从而实现多态的概念。 通过继承,子可以继承的非私有成员变量和方法。这样可以实现代码的复用,避免重复编写相似的代码。通过继承,可以在子中调用父的方法,也可以在子中新增自己特有的方法和属性。子还可以对从父继承来的方法进行修改,以适应自己的需求。 多态是指同一型的对象,在不同的状态下表现出不同的行为。在Java中,多态性可以通过继承和方法的重写实现。当父的引用指向子的实例时,可以通过该引用调用子中重写的方法,实现不同的对象调用同一个方法产生不同的结果。多态可以提高代码的灵活性和扩展性,使得程序更易于维护和扩展。 在Educoder平台上,可以通过练习和编程任务来学习和掌握Java继承多态。通过编写继承的子,重写父的方法以及引用父的实例来实现多态,可以更好地理解和应用这两个概念。平台提供了丰富的练习题和编程任务,帮助学习者提高对继承多态的理解和应用能力。 总之,Java中的继承多态是面向对象编程中的重要概念,通过继承可以实现代码的复用,多态可以实现不同对象的不同行为。在Educoder平台上通过练习和编程任务,可以更好地学习和掌握这两个概念。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

林笙10

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

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

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

打赏作者

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

抵扣说明:

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

余额充值