要求: 定义一个接口用来实现两个对象的比较。 1、定义一个Circle类。 2、定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。 3、定义一个测试类TestInterface,创建两个ComparableCircle对象,调用compareTo方法比较两个类的半径大小。 4、思考:参照上述做法定义矩形类Rectangle和ComparableRectangle类,在ComparableRectangle类中给出compareTo方法的实现,比较两个矩形的面积大小。
package com.hike.javase.homework;
//定义一个接口用来实现两个对象的比较。
interface CompareObject{
public int compareTo(Object o); //若返回值是 0 , 代表相等; 若为正数,代表当前对象大;负数代表当前对象小
}
//定义一个Circle类。
class Circle{
private int radius;
public Circle() {
}
public Circle(int radius) {
this.radius = radius;
}
public int getRadius() {
return radius;
}
public void setRadius(int radius) {
this.radius = radius;
}
@Override
public String toString() {
return "Circle{" +
"radius=" + radius +
'}';
}
}
/*定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。
在ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。
*/
class ComparebleCircle extends Circle implements CompareObject{
public ComparebleCircle() {
}
public ComparebleCircle(int radius) {
super(radius);
}
@Override
public int compareTo(Object o) {
if(o instanceof ComparebleCircle) {
ComparebleCircle o1 = (ComparebleCircle) o; //对象的造型,造型有风险,提前判断一下
if (this.getRadius() == o1.getRadius()) { //注意:0.getRadius()因为多态的副作用,导致子类的特有方法不可以被调取
return 0;
} else if (this.getRadius() > o1.getRadius()) {
return 1;
} else {
return -1;
}
}
return 0X80000000;
}
}
/*定义一个测试类TestInterface,创建两个ComparableCircle对象,
调用compareTo方法比较两个类的半径大小。
思考:参照上述做法定义矩形类Rectangle和ComparableRectangle类,
在ComparableRectangle类中给出compareTo方法的实现,比较两个矩形的面积大小。
*/
class Rectangle{
private int area;
public Rectangle(int area) {
this.area = area;
}
public int getArea() {
return area;
}
public void setArea(int area) {
this.area = area;
}
@Override
public String toString() {
return "Rectangle{" +
"area=" + area +
'}';
}
}
class ComparableRectangle extends Rectangle implements CompareObject{
public ComparableRectangle(int area) {
super(area);
}
@Override
public int compareTo(Object o) {
if(o instanceof ComparableRectangle) {
ComparableRectangle o2 = (ComparableRectangle) o;
if (this.getArea() > o2.getArea()) {
return 1;
} else if (this.getArea() < o2.getArea()) {
return -1;
} else {
return 0;
}
}
return 0;
}
}
public class HomeWork {
public static void main(String[] args) {
ComparebleCircle c1 = new ComparebleCircle(20);
ComparebleCircle c2 = new ComparebleCircle(30);
System.out.println(c1.compareTo(c2));
ComparableRectangle r1 = new ComparableRectangle(30);
ComparableRectangle r2 = new ComparableRectangle(24);
System.out.println(r1.compareTo(r2));
}
}