Метод какого интерфейса будет вызван?

Есть вот такие интерфейсы:

public interface A {
    void say();
}

public interface B {
    void say();
}

есть класс реализующий эти интерфейсы:

public class Test implements A, B {

    @Override
    public void say() {
        System.out.println("SAAAY");
    }
}

Допустим создаем экземпляр класса и вызван метод say():

Test test = new Test();
test.say();

Метод какого интерфейса будет вызван? Как вообще работает компиляция вот этого класса?


Ответы (1 шт):

Автор решения: Roman Konoval

В интерфейсе нет реализации, так что будет вызван метод из класса Test.

В месте вызова:

test.say();

компилятор вставит специальную инструкцию jvm, суть которой в том, что будет вызван метод say у класса объекта test, т.е. в данном случае метод из класса Test.

→ Ссылка