1/* 2 * @test /nodynamiccopyright/ 3 * @bug 8062373 8151018 4 * 5 * @summary Test that javac complains when a <> inferred class contains a public method that does override a supertype method. 6 * @author sadayapalam 7 * @compile/fail/ref=Neg15.out Neg15.java -XDrawDiagnostics 8 * 9 */ 10 11class Neg15 { 12 13 interface Predicate<T> { 14 default boolean test(T t) { 15 System.out.println("Default method"); 16 return false; 17 } 18 } 19 20 21 static void someMethod(Predicate<? extends Number> p) { 22 if (!p.test(null)) 23 throw new Error("Blew it"); 24 } 25 26 public static void main(String[] args) { 27 28 someMethod(new Predicate<Integer>() { 29 public boolean test(Integer n) { 30 System.out.println("Override"); 31 return true; 32 } 33 boolean test(Integer n, int i) { 34 System.out.println("Override"); 35 return true; 36 } 37 protected boolean test(Integer n, int i, int j) { 38 System.out.println("Override"); 39 return true; 40 } 41 private boolean test(Integer n, int i, long j) { 42 System.out.println("Override"); 43 return true; 44 } 45 }); 46 47 someMethod(new Predicate<>() { 48 public boolean test(Integer n) { // bad. 49 System.out.println("Override"); 50 return true; 51 } 52 boolean test(Integer n, int i) { // bad, package access. 53 System.out.println("Override"); 54 return true; 55 } 56 protected boolean test(Integer n, int i, int j) { // bad, protected access. 57 System.out.println("Override"); 58 return true; 59 } 60 private boolean test(Integer n, int i, long j) { // OK, private method. 61 System.out.println("Override"); 62 return true; 63 } 64 }); 65 } 66} 67