import java.io.Serializable; class Base { } class Sub1 extends Base implements Serializable { public void run() { } } class Sub2 extends Base implements Serializable { public void run() { } } public class TypeInference { static <T extends Base> T infer(T t1, T t2) { return null; } public static void main(String[] args) { Base base = infer(new Sub1(), new Sub2()); Serializable runnable = infer(new Sub1(), new Sub2()); } }