1/* @test /nodynamiccopyright/ 2 * @bug 8071453 3 * @author sadayapalam 4 * @summary Test various JLS changes made for supporting private interface methods. 5 * @compile/fail/ref=Private08.out -XDrawDiagnostics Private08.java 6 */ 7class Private08 { 8 interface I { 9 private void poo() {} 10 private int foo() { return 0; } 11 int goo(); 12 default int doo() { return foo(); } 13 private public int bad(); // 9.4 illegal combination of modifiers 14 private abstract int verybad(); // 9.4 illegal combination of modifiers 15 private default int alsobad() { return foo(); } // 9.4 illegal combination of modifiers 16 protected void blah(); 17 private void missingBody(); // private methods are not abstract. 18 } 19} 20 21class Private08_01 { 22 int y = ((Private08.I) null).foo(); // 9.4 test that private methods are not implicitly public. 23 interface J extends Private08.I { 24 default void foo() { // foo not inherited from super, change of return type is OK. 25 super.foo(); // super in static context - Error. 26 } 27 private int doo() { return 0; } // private cannot override public. 28 }; 29 30 Private08.I i = new Private08.I () { 31 public void foo() { // foo not inherited from super, change of return type is OK. 32 super.foo(); // super's foo not inherited, NOT OK. 33 } 34 private int doo() { return 0; } // private cannot override public. 35 }; // should not complain about poo() not being implemented. 36} 37 38