class DefaultConstructor { interface I1 { R invoke(); } interface I2 { R invoke(A a); } static class Outer { class Inner { } static void test1() { I2 i2 = Inner :: new; I2 i2str = Inner :: new; } void test2() { I1 i1 = Inner :: new; I1 i1Int = Inner :: new; I2 i2 = Inner :: new; } } static void test1() { I2 i2 = Outer.Inner::new; I2 i2str = Outer.Inner::new; } void test2() { I2 i2 = Outer.Inner::new; I2 i2str = Outer.Inner::new; } }