java - 无法创建抽象父类(super class)的非抽象子类?

标签 java oop inheritance compiler-errors abstract

我有一个子类,它声明了我的抽象父类(super class)中的所有方法,但它仍然给我一个错误,指出我的类不是抽象的。我不明白为什么会抛出这个错误。

我收到的具体错误是

PhoneBookEntry.java:1: error: PhoneBookEntry is not abstract and does not override abstract method compareTo(Object) in Comparable

我的问题代码:

public abstract class PhoneNumber implements Comparable
{
   protected String firstName, lastName;
   protected int number;

   public PhoneNumber(String firstName, String lastName, int number)
   {
      this.firstName = firstName;
      this.lastName = lastName;
      this.number = number;
   }

   public abstract String getLastName();
   public abstract String getFirstName();
   public abstract int getNumber();

   public int compareTo(PhoneNumber other)
   {
      int last = other.lastName.compareTo(lastName);
      int first = other.firstName.compareTo(firstName);
      int num = other.number - number;
      if(last > 0)
         return 1;
      else if(last < 0)
         return -1;
      else
         if(first > 0)
            return 1;
         else if(first < 0)
            return -1;
         else
            if(num > 0)
               return 1;
            else if(num < 0)
               return -1;
            else 
               return 0;
   }
}

还有我的子类:

public class PhoneBookEntry extends PhoneNumber
{
   public PhoneBookEntry(String firstName, String lastName, int number)
   {
      super(firstName, lastName, number);
   }

    public String getLastName()
   {
      return lastName;
   }
   public String getFirstName()
   {
      return firstName;
   }
   public int getNumber()
   {
      return number;
   }

   public int compareTo(PhoneNumber other)
   {
      super.compareTo(other);
   }

}

最佳答案

这就是问题:

public int compareTo(PhoneNumber other)
{
   super.compareTo(other);
}

您已指定您只是实现原始类型 Comparable,该类型的方法签名为:

int compareTo(Object)

最干净的解决方法是将 PhoneNumber 的声明更改为:

public abstract class PhoneNumber implements Comparable<PhoneNumber>

可以实现compareTo(Object),但是您真的希望能够将电话号码与任何其他对象进行比较吗?仅仅声称能够将电话号码与其他电话号码进行比较更有意义(IMO)。

关于java - 无法创建抽象父类(super class)的非抽象子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083374/

相关文章:

java - 将数组传递给注释的语法

java - volatile变量可以在java中定义为静态吗?

python - 如何将一个空函数包装在 try-except block 中由子类实现?

java继承字段设置与构造函数

Java ConcurrentSkipListMap的computeIfAbsent方法 "applied once atomically"

java - 在 Java 中使用正则表达式提取值

java - 专门针对 double 和浮点精度的 java 类

c++ - 尝试从另一个 .cpp 启动 TShape 时成员标识符预期错误

java - 如何在android Activity中使用多重继承?

c# - c# 枚举是否有基础对象?