Динамический конструктор, вызывающий в 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();
}
Другие вопросы по тегам