Динамический конструктор, вызывающий в Java?
Предположим, у меня есть 4 класса: A
, B
, SA
а также SB
где B extends A
а также SB extends SA
,
Учебный класс A
имеет следующий конструктор:
private SA a;
public A() {
a = new SA();
}
Очевидно, когда я вызываю конструктор для класса B
и с тех пор B extends A
конструктор класса A
также называется. Но в таком случае я хотел бы конструктор A
сделать a = new SB();
вместо a = new SA();
,
Есть ли простой способ сделать это без изменения общедоступных интерфейсов обоих A
а также B
?
2 ответа
Решение
Просто есть public
constructor and a protected
конструктор:
private SA a;
public A() {
this(new SA());
}
protected A(final SA a) {
this.a = a;
}
Затем в B
:
public B() {
super(new SB());
}
Да, это. Например:
public A(YourEnum en) {
if (en == YourEnum.SA){
a = new SA();
} else {
a = new SB();
}
}
Также, зависит от того, что вам действительно нужно, это можно сделать, перегружая конструкторы
public A(){
a = new SA();
}
public A(YourObjectYouNeed dataNeededForAnotherConstructor){
//doing initialization stuff
a = new SB();
}