langtools/test/tools/javac/defaultMethods/private/Private08.java
changeset 29293 1583c6dd6df7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/defaultMethods/private/Private08.java	Mon Mar 02 10:41:08 2015 +0530
@@ -0,0 +1,37 @@
+/* @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.
+}
+