import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; class X extends A { @NotNull @Override String foo(int n, @NotNull String s, @Nullable Object o) { return ""; } } class Y extends X { @NotNull @Override String foo(int n, @NotNull String s, @Nullable Object o) { return super.foo(n, s, o); } } class Test { void test() { new A().foo(1, "abc", "def"); new B().foo(2, "abc", "def"); new X().foo(3, "abc", "def"); new Y().foo(4, "abc", "def"); } }