5.定义一个接口用来实现两个对象的比较。
interface CompareObject{
public int compareTo(Object o); //若返回值是 0 , 代表相等; 若为正数,代表当前对象大;负数代表当前对象小
}
定义一个Circle类,声明redius属性,提供getter和setter方法
定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。
定义一个测试类InterfaceTest,创建两个ComparableCircle对象,调用compareTo方法比较两个类的半径大小。
思 考 : 参 照 上 述 做 法 定 义 矩 形 类 Rectangle 和 ComparableRectangle 类 , 在
ComparableRectangle类中给出compareTo方法的实现,比较两个矩形的面积大小。
package ten1;
public interface CompareObject {
public int compareTo(Object o);
}
package ten1;
public class Circle {
//定义radius
private double radius;
//提供无参构造带参构造
public Circle() {
}
public Circle(double radius) {
this.radius = radius;
}
//提供getset方法
public void setRadius(double radius) {
this.radius = radius;
}
public double getRadius(){
return radius;
}
}
package ten1;
public class ComparableCircle extends Circle implements CompareObject {
//无参构造和带参构造
public ComparableCircle() {
}
public ComparableCircle(double radius) {
super(radius);
}
//方法重载
@Override
public int compareTo(Object o) {
if(o instanceof ComparableCircle){
if(this.getRadius()==((ComparableCircle) o).getRadius()){
return 0;
}else if(this.getRadius()>((ComparableCircle) o).getRadius()){
// return (int)(this.getRadius()-((ComparableCircle) o).getRadius());
return 1;
}else if(this.getRadius()<(((ComparableCircle) o).getRadius())){
// return (int)(this.getRadius()-((ComparableCircle) o).getRadius());
return -1;
}
}
return -2;
}
}
package ten1;
import java.util.Scanner;
public class InterfaceTest {
public static void main(String[] args) {
System.out.println("请输入用于比较圆的第一个半径");
Scanner sc=new Scanner(System.in);
double radius1=sc.nextDouble();
System.out.println("请输入用于比较圆的第二个半径");
double radius2=sc.nextDouble();
CompareObject m=new ComparableCircle(radius1);
CompareObject n=new ComparableCircle(radius2);
//用num接收其返回值
int num=m.compareTo(n);
//判断那个半径大
if(num==0){
System.out.println("两个圆的半径相等");
}else if(num==1){
System.out.println("第一个圆的半径大");
}else if(num==-1){
System.out.println("第二个圆的半径大");
}
System.out.println("请输入第一个矩形的长,宽");
double a=sc.nextDouble();
double b=sc.nextDouble();
System.out.println("请输入第二个矩形的长,宽");
double a1=sc.nextDouble();
double b2=sc.nextDouble();
//创建对象
CompareObject c1=new ComparableRectangle();
CompareObject c2=new ComparableRectangle();
//接收方法
int p=c1.compareTo(c2);
if(p==0){
System.out.println("矩形的两个面积相等");
}else if(p>0){
System.out.println("第一个矩形的面积更大一点");
}else if(p<0){
System.out.println("第二个矩形的面积更大一点");
}
}
}
package ten1;
//定义矩形类
public class Rectangle {
//定义矩形的长
private double a;
private double b;
//带参无参构造
public Rectangle(double a, double b) {
this.a = a;
this.b = b;
}
public Rectangle() {
}
//提供getset方法
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
}
package ten1;
public class ComparableRectangle extends Rectangle implements CompareObject{
public ComparableRectangle(double a, double b) {
super(a, b);
}
public ComparableRectangle() {
}
@Override
public int compareTo(Object o) {
//判断o是否属于该类
if(o instanceof ComparableRectangle){
if((this.getA()*this.getB())==(((ComparableRectangle) o).getA()*((ComparableRectangle) o).getB())){
return 0;
}else if((this.getA()*this.getB())>(((ComparableRectangle) o).getA()*((ComparableRectangle) o).getB())){
return 1;
}else if((this.getA()*this.getB()<(((ComparableRectangle) o).getA()*((ComparableRectangle) o).getB()))){
return 2;
}
}
return -1;
}
}
个人心得如下:
刚做这个实验时候对这个实验的某个方法不理解,后来借助网络上现有资源的查找,发现了Object o表示了全局对象,首先得通过之前学过的instanceof进行判断,判断该对象是否属于这一类中,若属于在完成执行的下一次操作,在通过if循环里面判断两个圆的半径大小,矩形的面积便可同理得出相关结论。



