With Java 8’s "default method" feature, any abstract class without direct or inherited field should be converted into an interface. However, this
change may not be appropriate in libraries or other applications where the class is intended to be used as an API.
Note that this rule is automatically disabled when the project’s sonar.java.source
is lower than 8
.
Noncompliant code example
public abstract class Car {
public abstract void start(Environment c);
public void stop(Environment c) {
c.freeze(this);
}
}
Compliant solution
public interface Car {
public void start(Environment c);
public default void stop(Environment c) {
c.freeze(this);
}
}