Tengo dos clases, una es la subclase de otra. Quiero hacerlo para que la superclase pueda hacer sus métodos originales incluso si el objeto real es una instancia de la subclase.
El siguiente código imprime hola nulo y luego genera el error:Cannot invoke "A.doThis()" because "this.object" is null
public class A {
A object;
public void doSomething(){
System.out.println("hello " + object);
object.doThis();
}
public void doThis(){
System.out.println("Did this");
}
}
public class B extends A{
B object;
public static void main(String[] args){
B b = new B();
b.create();
}
public void create(){
object = new B();
object.doSomething();
}
}
Entiendo que en la Clase A, el objeto en realidad no se crea en ninguna parte, por lo que probablemente sea nulo. Me pregunto cómo puedo hacer para que no lo sea.
Solución del problema
If you want to reference an instance of the class within one of its methods, then use this
.
Si desea asegurarse de que un método en una superclase mantenga su implementación original y nunca sea anulado por una subclase, entonces conviértalo en definitivo.
Si esto no es lo que quiere, entonces no creo que lo que está tratando de hacer sea realmente práctico.
public class A {
public final void doSomething(){
System.out.println("hello " + this);
this.doThis();
}
public final void doThis(){
System.out.println("Did this");
}
}
public class B extends A{
public static void main(String[] args){
B b = new B();
b.create();
}
public void create(){
this.doSomething();
}
}
No hay comentarios:
Publicar un comentario