package top.qaqaq.java.P358;
/*
* 定义一个接口用来实现两个对象的比较。
* interface CompareObject{
public int compareTo(Object o);
//若返回值是 0 , 代表相等; 若为正数,代表当前对象大;负数代表当前对象小
}
*
*/
public interface CompareObject {
// 若返回值是 0 , 代表相等; 若为正数,代表当前对象大;负数代表当前对象小
public int compareTo(Object o);
}
package top.qaqaq.java.P358;
/*
* 定义一个Circle类,声明redius属性,提供getter和setter方法
*
*/
public class Circle {
private Double redius;
public Circle() {
super();
}
public Circle(Double redius) {
super();
this.redius = redius;
}
public Double getRedius() {
return redius;
}
public void setRedius(Double redius) {
this.redius = redius;
}
}
package top.qaqaq.java.P358;
/*
* 定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。
* 在ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。
*
*
*
*/
public class ComparableCircle extends Circle implements CompareObject {
public ComparableCircle(double radius) {
super(radius);
}
@Override
public int compareTo(Object o) {
if (this == o) {
return 0;
}
if (o instanceof ComparableCircle) {
ComparableCircle c = (ComparableCircle) o;
// 错误的:
// return (int) (this.getRedius() - c.getRedius());
// 正确的方式一:
// if (this.getRedius() > c.getRedius()) {
// return 1;
// } else if (this.getRedius() < c.getRedius()) {
// return -1;
// } else {
// return 0;
// }
//当属性radius声明为Double类型时,可以调用包装类的方法
//正确的方式二:
return this.getRedius().compareTo(c.getRedius());
} else {
// return 0;
throw new RuntimeException("传入的数据类型不匹配");
}
}
}
package top.qaqaq.java.P358;
public class ComparableCircleTest {
public static void main(String[] args) {
ComparableCircle c1 = new ComparableCircle(3.4);
ComparableCircle c2 = new ComparableCircle(3.6);
int compareValue = c1.compareTo(c2);
if(compareValue > 0) {
System.out.println("c1对象大");
}else if(compareValue < 0) {
System.out.println("c2对象大");
}else {
System.out.println("c1与c2一样大");
}
int comperValue1 = c1.compareTo(new String("AA"));
System.out.println(comperValue1);
}
}