Рассмотрим следующий код:Java полиморфизм
public abstract class Base {
public void getAnswer();
}
public class Derived1 extends Base {
public void getAnswer() {
}
}
public class Derived2 extends Base {
public void getAnswer() {
}
}
public class Main {
public final int DERIVED1 = 1;
public final int DERIVED2 = 2;
public Base b;
public static void Main() {
int which_obj = which();
switch (which_obj) {
case DERIVED1: Derived1 derived1 = new Derived1();
// construct object
b = derived1;
break;
case DERIVED2: Derived1 derived1 = new Derived1();
// construct object
b = derived2;
break;
}
b.getAnswer();
}
}
здесь мы используем случай переключатель, чтобы решить, какой объект на строительство и, соответственно, мы строим его и присвоить ему б так, чтобы использовать полиморфизм.
Какое преимущество дает нам полиморфизм?
Теперь есть способ, с помощью которого мы можем избежать случая переключения. say: есть отображение из int в String, которое возвращает «Derived1» или «Derived2». , если строка содержит имя класса. теперь я могу построить объект, заданный Строкой, содержащей имя класса. что-то вроде:
Base b = construct_obj(str);
библиотека вызов construct_obj автоматически находит класс OBJ из байткодов и возвращает ссылку на объект. то я могу избежать случая переключения. обычно я бы имел 100 классов Derived.
вы имели в виду «случай DERIVED2: Derived2 derived2 = новый Derived2() ;» ? В противном случае нет такой вещи, которая была бы присвоена b. – Edmund