接口练习题2

接口练习题

package com.atsgg.interfaceTest;
/*
 * 定义一个接口用来实现两个对象的比较
 * public int compareTo(Object o); 
 * // 若返回值是 0,代表相等;
 * // 若为正数,代表当前对象大;负数代表当前对象小
 * 
 */
interface CompareObject{
	
	// 若返回值是 0,代表相等;
	// 若为正数,代表当前对象大;负数代表当前对象小
	public int compareTo(Object o); 
}
/*
 * 定义一个Circle类,声明redius属性,提供getter和setter方法
 * 
 */
class Circle {
	private Double radius;

	public Circle() {
		super();
	}

	public Circle(Double radius) {
		super();
		this.radius = radius;
	}

	public Double getradius() {
		return radius;
	}

	public void setradius(Double radius) {
		this.radius = radius;
	}
}
/*
 * 定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口,
 * 在ComparableCircle类中给出接口方法compareTo的实现类,用来比较两个
 * 圆的半径大小
 * 
 */
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.getradius() - c.getradius());
			
			// 正确的方式一
//			if(this.getradius() > c.getradius()) {
//				return 1;
//			} else if(this.getradius() < c.getradius()) {
//				return -1;
//			} else {
//				return 0;
//			}
			// 当属性radius声明为Double类型时,可以调用包装类的方法
			// 正确的方式二
			return this.getradius().compareTo(c.getradius());
		} else {
			return 0;
//			throw new RuntimeException("传入的数据类型不匹配");
		}
	}
	
}
/*
 * 定义一个测试类InterfaceTest,创建两个ComparableCircle对象,
 * 调用compareTo方法比较两个类的半径大小
 * 
 */
public class InterfaceTest2 {
	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 compareValue1 = c1.compareTo(new String("AA"));
		System.out.println(compareValue1); 
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值