我有一个实现可比较的抽象类,具有以下内容:
public abstract class Figure implements Comparable{
protected double height ;
public abstract double getArea();
public abstract double calculatevolume();//will be used later to compare the volume
public int compareTo(Figure o) {
return 0;
}
}
我有圆形和方形作为图的孩子但是当我尝试比较两个对象的体积时它总是返回0!
这是我在circle类中的compareTo方法:
public int compareTo(Object o) {
Figure a = (Figure) o;
if (this.calculatevolume() > ((Figure) o).calculatevolume())
return (int)this.calculatevolume();
else if (this.calculatevolume() < ((Figure) o).calculatevolume())
return (int) a.calculatevolume();
else
return 0;
}
答案 0 :(得分:0)
它应该更好,但首先请检查您可能返回0的方法calculatevolume
天气的实施情况。
请为可比较的界面public abstract class Figure implements Comparable<Figure>
Figure circle = new Circle();
Figure square = new Square();
circle.compareTo(square);
public int compareTo(Figure a) {
if (this.calculatevolume() > a.calculatevolume())
return (int)this.calculatevolume();
else if (this.calculatevolume() < a.calculatevolume())
return (int) a.calculatevolume();
return 0;
}
答案 1 :(得分:0)
您正在使用Comparable
界面的原始版本
public abstract class Figure implements Comparable{
换句话说,您尚未向Comparable
提供类型参数。因此,它期望一个声明为
public int compareTo(Object o) {
但你的班级是abstract
所以它不会抱怨。您提供的方法
public int compareTo(Figure o) {
与Comparable
完全无关。如果您使用@Override
注释它,您会看到这一点。
在您的子课程中,您提供了
public int compareTo(Object o) {
这是预期的方法(它使paren'ts超载)。但不是你所呼唤的人。
您可能正在使用它
Figure one = ...
Figure two = ...
one.compareTo(two);
因为声明的two
类型是Figure
,所以它将使用父重载实现,它需要Figure
,并且始终返回0.
解决方案是为Comparable
提供适当的类型参数。
public abstract class Figure implements Comparable<Figure>{
并从那里开始工作。