抽象与空方法

Nik*_*Nik 1 java abstract-class overriding abstract

我需要在现有的抽象类中添加一个可选方法,该类可以扩展50多个类:

public abstract class Animal{...}
Run Code Online (Sandbox Code Playgroud)

并非所有这些类都使用此方法,但是将来可能会使用。

我的课程之一的结构是:

public class Dog extends Animal {...}
Run Code Online (Sandbox Code Playgroud)

最干净的方法是使用abstractmethod,但它使我不得不更改所有现有的类。

解决方法是在abstract类中创建“空”方法:

public String getString(Map<String, Object> params){
       return "";
   }
Run Code Online (Sandbox Code Playgroud)

然后在需要扩展抽象类的类时覆盖它。

有更好的解决方案吗?

And*_*niy 5

拥有“空”方法是好的。但是为了确保可以在真正需要它的地方实现,请考虑默认情况下从此方法引发异常:

    throw new UnsupportedOperationException();
Run Code Online (Sandbox Code Playgroud)

java.util.AbstractList课堂上使用了类似的方法:

public E set(int index, E element) {
    throw new UnsupportedOperationException();
}
Run Code Online (Sandbox Code Playgroud)