import org.jetbrains.annotations.NotNull; class A { @NotNull T foo() { return null; } } class B extends A { @Override @NotNull T foo() { return null; } } class C extends B { @Override @NotNull String foo() { return null; } }