import java.util.function.BinaryOperator; class Test { static class Base { Child prepend(Child other) { return null; } } static class Child extends Base { @SafeVarargs final Child prepend(T... args) { return this; } Child prepend(T arg) { return this; } } public static void main(String[] args) { BinaryOperator> prepend = Child::prepend; } }