У меня есть этот вопрос, касающийся наследования, полиморфизма, перегрузки и переопределения.Я понимаю все эти термины, но не уверен, как они работают здесь.Вот код:
class A {
public String show(D obj) {return "A and D";}
public String show(A obj) {return "A and A";}
}
class B extends A {
public String show(B obj) {return "B and B";}
public String show(A obj) {return "B and A";}
}
class C extends B{}
class D extends B{}
public class whatever {
public static void main(String[] args) {
A a = new B(); // note the B here
B b = new B();
C c = new C();
D d = new D();
System.out.println(a.show(a)); // B and A
System.out.println(a.show(b)); // B and A
System.out.println(a.show(c)); // B and A
System.out.println(a.show(d)); // A and D
}
}
Итак, задача здесь - найти выход.У меня уже есть ответы, это комментарии, которые я поставил.
Я понимаю первый, потому что Java автоматически выполняет динамическое связывание, поэтому a.show () вызывает show () из класса B, а a имееттип A, так что B.show (A obj) вызывается.
Последний тоже имеет смысл, метод show () перегружен и, поскольку d относится к типу D, вызывается A.show (D obj).который унаследован от класса А.
Два других, с которыми у меня проблемы.Хорошо, я понимаю, что это имеет смысл, потому что b и c оба являются объектами типа A технически, но почему это идет с "B и A" над "B и B"?