Calling default method in interface when having conflict with private method : <p>Consider below class hierarchy.</p>

<pre><code>class ClassA {
    private void hello() {
        System.out.println("Hello from A");
    }
}

interface Myinterface {
    default void hello() {
        System.out.println("Hello from Interface");
    }
}

class ClassB extends ClassA implements Myinterface {

}

public class Test {
    public static void main(String[] args) {
        ClassB b = new ClassB();
        b.hello();
    }
}
</code></pre>

<p>Running the program will give following error :</p>

<pre><code>Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.testing.ClassA.hello()V from class com.testing.Test
at com.testing.Test.main(Test.java:23)
</code></pre>

<ol>
<li>This is all because I marked ClassA.hello as private.</li>
<li>If I mark ClassA.hello as protected or remove the visibility modifier(i.e. making it default scope), then it shows a compiler error as :
<code>The inherited method ClassA.hello() cannot hide the public abstract method in Myinterface</code></li>
</ol>

<p>However, as per exception stacktrace above, <strong>I get a runtime IllegalAccessError.</strong></p>

<p>I couldn't get why this is not detected at compile time. Any clues ?</p>
