interface A{
void fun();
}
interface B extends A{
default void fun(){
}
}
interface C extends A{
default void fun(){
}
}
class D implements B, C{
public void fun(){
B.super.fun();
C.super.fun();
}
}
class E implements B{}
class AB {
public void fun(){
System.
out.
println("inside AB"); }
}
class F extends AB implements C{} // class AB and interface C have fun() method, but priority is given to class method implementation
class Ideone
{
public static void main
(String[] args
) {
D d = new D();
d.fun();
E e = new E();
e.fun();
F f = new F();
f.fun();
}
}
aW50ZXJmYWNlIEF7Cgl2b2lkIGZ1bigpOwp9CgppbnRlcmZhY2UgQiBleHRlbmRzIEF7CglkZWZhdWx0IHZvaWQgZnVuKCl7CgkJU3lzdGVtLm91dC5wcmludGxuKCJCIik7Cgl9Cn0KCmludGVyZmFjZSBDIGV4dGVuZHMgQXsKCWRlZmF1bHQgdm9pZCBmdW4oKXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkMiKTsKCX0KfQoKY2xhc3MgRCBpbXBsZW1lbnRzIEIsIEN7CglwdWJsaWMgdm9pZCBmdW4oKXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkQiKTsKCQlCLnN1cGVyLmZ1bigpOwoJCUMuc3VwZXIuZnVuKCk7Cgl9Cn0KCmNsYXNzIEUgaW1wbGVtZW50cyBCe30KCmNsYXNzIEFCIHsKCQlwdWJsaWMgdm9pZCBmdW4oKXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImluc2lkZSBBQiIpOwoJfQp9CmNsYXNzIEYgZXh0ZW5kcyBBQiBpbXBsZW1lbnRzIEN7fSAvLyBjbGFzcyBBQiBhbmQgaW50ZXJmYWNlIEMgaGF2ZSBmdW4oKSBtZXRob2QsIGJ1dCBwcmlvcml0eSBpcyBnaXZlbiB0byBjbGFzcyBtZXRob2QgaW1wbGVtZW50YXRpb24KCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykKCXsKCQlEIGQgPSBuZXcgRCgpOwoJCWQuZnVuKCk7CgoJCUUgZSA9IG5ldyBFKCk7CgkJZS5mdW4oKTsgCgoJCUYgZiA9IG5ldyBGKCk7CgkJZi5mdW4oKTsKCX0KfQ==