langtools/test/tools/javac/defaultMethods/private/Private08.java
author sadayapalam
Mon, 02 Mar 2015 10:41:08 +0530
changeset 29293 1583c6dd6df7
permissions -rw-r--r--
8071453: Allow interface methods to be private Reviewed-by: mcimadamore Contributed-by: maurizio.cimadamore@oracle.com, srikanth.adayapalam@oracle.com

/* @test   /nodynamiccopyright/
 * @bug    8071453
 * @author sadayapalam
 * @summary Test various JLS changes made for supporting private interface methods.
 * @compile/fail/ref=Private08.out -XDrawDiagnostics Private08.java
 */
class Private08 {
    interface I {
        private void poo() {}
        private int foo() { return 0; }
        int goo();
        default int doo() { return foo(); }
        private public int bad(); // 9.4 illegal combination of modifiers
        private abstract int verybad(); // 9.4 illegal combination of modifiers
        private default int alsobad() { return foo(); } // 9.4 illegal combination of modifiers
        protected void blah();
        private void missingBody(); // private methods are not abstract.
    }
}

class Private08_01 {
    int y = ((Private08.I) null).foo();   // 9.4 test that private methods are not implicitly public.
    interface J extends Private08.I {
        default void foo() { // foo not inherited from super, change of return type is OK.
            super.foo();  // super in static context - Error.
        }
        private int doo() { return 0; } // private cannot override public.
    };

    Private08.I i = new Private08.I () {
        public void foo() { // foo not inherited from super, change of return type is OK.
            super.foo();  // super's foo not inherited, NOT OK.
        }
        private int doo() { return 0; } // private cannot override public.
    }; // should not complain about poo() not being implemented.
}