¿Por qué no puedo convertir una instancia de clase base en una clase derivada?Java; clase base de conversión a la clase derivada
Por ejemplo, si tengo una clase B que amplía una clase C, ¿por qué no puedo hacer esto?
B b=(B)(new C());
¿o este?
C c=new C();
B b=(B)c;
bien déjame ser más específico en cuanto a lo que estoy tratando de hacer. Aquí es lo que tengo:
public class Base(){
protected BaseNode n;
public void foo(BaseNode x){
n.foo(x);
}
}
public class BaseNode(){
public void foo(BaseNode x){...}
}
Ahora quiero crear un nuevo conjunto de clases que se extienden base y Basenode, así:
public class Derived extends Base(){
public void bar(DerivedNode x){
n.bar(x);//problem is here - n doesn't have bar
}
}
public class DerivedNode extends BaseNode(){
public void bar(BaseNode){
...
}
}
Así que, esencialmente, quiero añadir nueva funcionalidad a la base y BaseNode al extenderlos a ambos y agregarles una función a ambos. Además, Base y BaseNode deberían poder usarse solos.
Realmente me gustaría hacer esto sin genéricos si es posible.
Muy bien, así que terminé descifrándolo, en parte gracias a la respuesta de Maruice Perry.
En mi constructor para Base
, n
se instancia como BaseNode
. Todo lo que tuve que hacer fue volver a crear una instancia de n
como DerivedNode
en mi clase derivada en el constructor, y funciona perfectamente.
En primer lugar, debe hacer BaseNode n; protegido para que Derived pueda verlo. – Joel
Woops (lo cambió). – Cam
Es decir, ¿no hay forma de hacerlo sin los genéricos? Como dije, quiero que las clases base sean utilizables tal como están; agregar genéricos hará que sean más engorrosos de usar y elimina la encapsulación de la clase BaseNode que se supone que está encapsulada por Base. – Cam