在子类中强制执行toString()实现

Dop*_*ele 13 java grails groovy

我有一个抽象的父类,我希望它强制所有子类实现toString()方法.

但是放:

public abstract String toString();
Run Code Online (Sandbox Code Playgroud)

导致编译错误:

Repetitive method name/signature for method 'java.lang.String toString()' in class ...
Run Code Online (Sandbox Code Playgroud)

我相信这可能是由已经定义了toString的groovy引起的.

谢谢

kit*_*ril 17

这适合我.这是新的还是别人错过了?

public abstract class Filterable
{
  @Override
  public abstract String toString();
}

public class ABC extends Filterable
{
  // Won't compile without toString();
}
Run Code Online (Sandbox Code Playgroud)

  • 只有当父类被设为"抽象"时它才会起作用,但这可能就是这里所希望的. (2认同)

Ara*_*ram 12

toString()是的一部分java.lang.Object,其已经为它的默认实现类.所以你基本上不能强迫子类实现它.如果你想强迫这种行为(不确定为什么)那么你可以做类似下面的事情

public class abstract SuperClass {
  public abstract String myToString();

  public String toString() {
    return myToString();
  }
}
Run Code Online (Sandbox Code Playgroud)


Jyr*_*117 7

简答:不可能.答案很长:您可以通过执行以下操作来尝试解决此问题,在父类中实现:

public final String toString() {
    getString();
}

public abstract String getString();
Run Code Online (Sandbox Code Playgroud)

这会导致子类需要实现"getString()"方法.但是,如果子类实现"getString()"方法,则子(孙)类的子项无法保证被强制实现该方法.例:

A is the parent class, with the getString() method.
B extends A, and implements the getString() method.
C extends B, doesn't have to implement the getString() method.
Run Code Online (Sandbox Code Playgroud)

希望有帮助:)