/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
B b = new C();
b.methodWhichCallsMethodOnInterface();
}
}
interface A{
default public void method1(){
System.
out.
println("method1 printing from interface A"); }
default public void method2(){
method1(); // note that method1() is overriden in class C.
// which one should be called? from A or C?
}
}
interface B extends A{
void methodWhichCallsMethodOnInterface();
}
class C implements B{
@Override
public void method1(){
System.
out.
println("method1 printing from class C"); }
@Override
public void methodWhichCallsMethodOnInterface(){
method2();
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCUIgYiA9IG5ldyBDKCk7CgkJYi5tZXRob2RXaGljaENhbGxzTWV0aG9kT25JbnRlcmZhY2UoKTsKCX0KfQoKaW50ZXJmYWNlIEF7CiAgICBkZWZhdWx0IHB1YmxpYyB2b2lkIG1ldGhvZDEoKXsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1ldGhvZDEgcHJpbnRpbmcgZnJvbSBpbnRlcmZhY2UgQSIpOwogICAgfQogICAgZGVmYXVsdCBwdWJsaWMgdm9pZCBtZXRob2QyKCl7CiAgICAgICAgIG1ldGhvZDEoKTsgLy8gbm90ZSB0aGF0IG1ldGhvZDEoKSBpcyBvdmVycmlkZW4gaW4gY2xhc3MgQy4KICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBvbmUgc2hvdWxkIGJlIGNhbGxlZD8gZnJvbSBBIG9yIEM/CiAgICB9Cn0KCmludGVyZmFjZSBCIGV4dGVuZHMgQXsKICAgIHZvaWQgbWV0aG9kV2hpY2hDYWxsc01ldGhvZE9uSW50ZXJmYWNlKCk7Cn0KCmNsYXNzIEMgaW1wbGVtZW50cyBCewogICAgQE92ZXJyaWRlIAogICAgcHVibGljIHZvaWQgbWV0aG9kMSgpewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWV0aG9kMSBwcmludGluZyBmcm9tIGNsYXNzIEMiKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyB2b2lkIG1ldGhvZFdoaWNoQ2FsbHNNZXRob2RPbkludGVyZmFjZSgpewogICAgICAgIG1ldGhvZDIoKTsKICAgIH0KfQ==