Java 类不是抽象的,并且不重写抽象方法错误。。。虽然它实现了方法
我收到这个错误消息,它不应该显示。 首先,在创建接口之后,我将其方法复制到实现该接口的所有类中,但错误仍然显示出来 目前看起来是这样的:Java 类不是抽象的,并且不重写抽象方法错误。。。虽然它实现了方法,java,class,interface,overriding,Java,Class,Interface,Overriding,我收到这个错误消息,它不应该显示。 首先,在创建接口之后,我将其方法复制到实现该接口的所有类中,但错误仍然显示出来 目前看起来是这样的: interface Shape { String getShapeName(); double getField(); } class Circle implements Shape { String name; double r; public Circle(String name, double r) {
interface Shape {
String getShapeName();
double getField();
}
class Circle implements Shape {
String name;
double r;
public Circle(String name, double r) {
this.name = name;
this.r = r;
}
@Override
public double getField(double r) {
return Math.PI * Math.pow(r, 2);
}
@Override
public String getShapeName() {
return this.name;
}
}
class Square implements Shape {
String name;
double a;
public Square(String name, double a) {
this.name = name;
this.a = a;
}
@Override
public double getField(double a) {
return Math.pow(a, 2);
}
@Override
public String getShapeName() {
return this.name;
}
}
class Triangle implements Shape {
String name;
double a;
double b;
double c;
public Triangle(String name, double a, double b, double c) {
this.name = name;
this.a = a;
this.b = b;
this.c = c;
}
@Override
public double getField(double a, double b, double c) {
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
@Override
public String getShapeName() {
return this.name;
}
}
我不知道为什么。。。我看到这个问题被问了几次,但在大多数情况下,这是因为没有从接口实现某些方法(或者键入错误的方法名称,这不是我的情况,因为接口方法被复制到所有3个类…您有:
界面形状{
字符串getShapeName();
双getField();
}
但是,您在子类中明确声明,您将覆盖:
@覆盖
公共双getField(双r){…}
double getField()
和double getField(double r)
不一样
:
子类中的实例方法与超类中的实例方法具有相同的签名(名称,加上其参数的编号和类型)和返回类型,将覆盖超类的方法
旁注:(它是方法顶部的
@Retention(SOURCE)
)注释,强制您重写相应的方法,否则您将无法编译文件。double getField();
和double getField(double r);
不相同。形状不是导入的,而是创建的(是的,这个问题是创建自己的形状接口所必需的)。为什么它们不一样呢?添加构造函数(扩展实现的方法)破坏它?不,一个方法有一个签名,它标识一个方法。签名是名称加上一系列参数类型。如果一个方法有相同的名称,但参数类型不同,则被认为是不同的方法。具有相同名称但参数类型不同的方法被称为重载。