Back to Intellij Community

ClassMayBeInterface

java/java-impl/resources/inspectionDescriptions/ClassMayBeInterface.html

2025.3-rc-21.1 KB
Original Source

Reports abstract classes that can be converted to interfaces.

Using interfaces instead of classes is preferable as Java doesn't support multiple class inheritance, while a class can implement multiple interfaces.

A class may be converted to an interface if it has no superclasses (other than Object), has only public static final fields, public abstract methods, and public inner classes.

Example:

abstract class Example {
    public static final int MY_CONST = 42;
    public abstract void foo();
}

class Inheritor extends Example {
    @Override
    public void foo() {
        System.out.println(MY_CONST);
    }
}

After the quick-fix is applied:

interface Example {
    int MY_CONST = 42;
    void foo();
}

class Inheritor implements Example {
    @Override
    public void foo() {
        System.out.println(MY_CONST);
    }
}

Configure the inspection:

Use the Report classes containing non-abstract methods when using Java 8 option to report only the classes with static methods and non-abstract methods that can be converted to default methods (only applicable to language level of 8 or higher).