Eu gostaria de fazer uma cópia do objeto SubClass no construtor BaseClass. Eu preciso que o código a seguir seja executado corretamente.
class BaseClass{
BaseClass() {}
BaseClass(BaseClass base) {
//TODO: how to implement?
}
}
class SubClass extends BaseClass {
SubClass() {}
}
public class Test {
public static void main(String[] args) {
BaseClass sub = new SubClass();
BaseClass subCopy = new BaseClass(sub);
if (subCopy instanceof SubClass) {
// need to be true
}
}
}
Isso é possível? Se sim, como posso fazer isso? Senão, como posso obter um efeito semelhante?
Respostas:
3 para resposta № 1Não é possível. Um construtor da classe A fornece uma instância de A, não há como contornar isso. Por que não instanciar a subclasse explicitamente?
Outra possibilidade pode envolver um método estático de fábrica, como:
public static BaseClass create(BaseClass input) {
// return BaseClass or subclass
}
1 para resposta № 2
Parece que você quer o objeto de BaseClass
ser uma instância de SubClass
que se estende BaseClass
.
É mesmo possível?
-Não. Não é possível.
o instanceof
operador retorna true
se a variável do lado esquerdo satisfizer É UM condição da variável ou classe no lado esquerdo.
o SubClass
É UM BaseClass
desde que se estende BaseClass
. Mas o BaseClass
nunca pode ser um SubClass
, já que não pode se estender SubClass
.
0 para resposta № 3
Você parece ter um design de cabeça para baixo. Se você precisar fazer o que está pedindo, precisará repensar o seu design. Idealmente em seu construtor de subclasse, você deve copiar ou inicializar as propriedades da classe base chamando super ().