/*
 * @test    /nodynamiccopyright/
 * @bug     4721069
 * @summary javac allows an interface to override a final method in Object
 * @author  gafter
 *
 * @compile/fail/ref=T4721069.out -XDrawDiagnostics  T4721069.java
 */

interface I {
    Class getClass(); // error: cannot overide final from Object
    static class T {
        static void f(I i) {
            if (i == null) {
                Integer x = Integer.valueOf(2);
            } else {
                I x = i;
                x.getClass();
            }
        }
        public static void meth() {
            f(null);
        }
    }
}
