我有这个原始的父抽象类Geometric,我在Octagon中扩展它,并且还实现了Comparable和Cloneable。 IDK为什么我一直收到上述错误。请帮助我们。
class Octagon extends GeometricObject implements Cloneable, Comparable{
private double side;
public class Octagon(){
}
public class Octagon(double s){
side=s;
}
public double getArea(){
return (2+4/Math.sqrt(2))*side*side;
}
public double getPerimeter(){
return 8*side;
}
public int compareTo(Object o){
if (getArea()>((Octagon)o).getArea()){
return 1;
}
else if (getArea()<((Octagon)o).getArea()){
return -1;
}
else
return 0;
}
public Object clone() throws CloneNotSupportedException{
super.clone();
}
}
这是我的几何课
public abstract class GeometricObject{
private String color="white";
private boolean filled;
private java.util.Date dateCreated;
protected GeometricObject(){
dateCreated=new java.util.Date();
}
protected GeometricObject(String color, boolean filled){
dateCreated=new java.util.Date();
this.color=color;
this.filled=filled;
}
public String getColor(){
return color;
}
public void setColor(String color){
this.color=color;
}
public boolean isFilled(){
return filled;
}
public void setFilled(boolean filled){
this.filled=filled;
}
public java.util.Date getDateCreated(){
return dateCreated;
}
public String toString() {
return "created on "+dateCreated+"\ncolor: "+color;
}
public abstract double getArea();
public abstract double getPerimeter();
}
答案 0 :(得分:6)
知道了 - 错误在你的“构造函数”中:
public class Octagon(){
// ^^^^^ <- remove
}
public class Octagon(double s){
// ^^^^^ <- remove
side=s;
}
class
“修饰符”是非法的。只需删除它们。
奖金建议 - 考虑更改compareTo
的实施。你正在看八角形区域,这对于比较是完全可以的。但它需要在每次需要比较两个八边形时计算面积。
由于该区域仅取决于side
值,因此将八边形按side
长度进行比较就足够且效率更高:
public int compareTo(Object other) {
if (!(other instanceof Octagon)) {
throw new IllegalArgumentException("Comparision with other types is not supported");
}
Integer thisSide = side; // autoboxing, legal conversion since Java 1.5
Integer otherSide = ((Octagon) other).side;
// Easy trick: Integer is already comparable ;)
return thisSide.compareTo(otherSide);
}
答案 1 :(得分:2)
我的猜测是GeometricObject是一个抽象类。它可能有一些需要在Octogon中实现的抽象方法。
<强>更新强>:
找到它。我将这两个类粘贴到Eclipse中,并且热潮:
public class Octagon(){
}
public class Octagon(double s){
side=s;
}
微妙而棘手的错字。从这两个构造函数声明中删除单词“class”,你仍然会有一两个错误,但它们应该是显而易见的。
答案 2 :(得分:0)
当您编写“Octagon extends GeometricObject”时,您基本上承诺您的类可以执行GeometricObject可以执行的所有操作,甚至更多。因此,如果你没有实现一个属于GeometricObject的方法,那么你就违背了这个承诺,而Java编译器则反对它。
答案 3 :(得分:0)
GeometricObject
是一个抽象类,在cass abstract
(或其中一个超类)中有一个GeometricObject
方法,你没有提供实现。
如果其中一个抽象方法缺少实现,则无法构造具体的类,则会出现编译错误。
答案 4 :(得分:0)
正如其他人所说,你应该发布GeometricObject.java
的内容以获得明确的答案。
然而,我非常清楚它是Comparable
。它是正确Comparable<T>
但您的代码中有Comparable
。尝试将代码更改为class Octagon extends GeometricObject implements Cloneable, Comparable<Object>