public abstract class Abstract {
public void abstractMethod() {}
public abstract void concreteMethod();
private static abstract class PrivateSuperClass {
//this won't be reported as anything, because this class is private and all its public
//inheritors are concrete and/or implement this method.
public abstract void method();
}
private static abstract class PubliclyUsedPrivateSuperClass {
public abstract void method();
}
public static class A extends PrivateSuperClass {
public void method() {}
}
public static abstract class B extends PrivateSuperClass {
public void method() {}
public abstract PubliclyUsedPrivateSuperClass abstractMethod();
}
public static class C extends PubliclyUsedPrivateSuperClass {
public void method() {}
}
}