Мне нужно написать, что является результатом этих вызовов методов.
Мой ответ был:
I i = new A();
i.m(b);
Мой ответ: m_IB, потому что I неу меня есть метод с типом B , поэтому я перешел к класс A , который реализует I . A также не имеет методов с параметром B , но расширяет I.IImpl , у которого есть метод с m (B b), который печатает m_IB.
I j = new B();
j.m(b);
Мой ответ: m_BB, потому что снова I не имеет никакого метода с типом B , поэтому я перешел к класс B потому что I j = новый B () и имеет am (B b), которые печатают m_BB.
interface I {
public void m(A a);
class IImpl {
public static void m(B b) { System.out.println("m_IB"); }
}
}
class A extends I.IImpl implements I {
public void m(A a) { System.out.println("m_AA"); }
}
class B extends A {
public void m(A a) {
super.m(a);
System.out.println("m_BA");
}
public static void m(B b) { System.out.println("m_BB"); }
}
public class Interfac {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.m(b); System.out.println(); // m_IB
I i = new A();
i.m(b); System.out.println(); // m_AA
I j = new B();j.m(b); // m_AA m_BA
}
}
Оба моих ответа неверны, и правильный вывод - m_AA для i и m_AA m_BA для j .Я не могу понять, почему я получаю этот вывод, даже если я вызываю метод с типом B. Оба правильных ответа вызывают методы am (A a).