overridable method inherit from java android inheritance

method - java subclass constructor



Obtener el nombre de la clase del niƱo del padre (6)

Tengo una clase base para todas mis actividades ( ActivityBase ) que se deriva de android.app.Activity . En onCreate quiero ejecutar alguna lógica condicional basada en la clase secundaria que se está ejecutando actualmente. Si SomeCustomActivity y AnotherCustomActivity extienden ActivityBase , ¿cómo puedo determinar en la clase principal ( ActivityBase ) cuál de los dos es el que se está ejecutando actualmente?


Creo que quieres usar el operador instanceof, por ejemplo:

if(this instanceof SomeCustomActivity) { // do stuff } else if (this instanceof AnotherCustomActivity) { // do other stuff }

Y eso es todo lo que hay que hacer.


En algunas ocasiones, simplemente esta línea en la clase padre resuelve este problema. Devuelve el nombre de la clase "hijo" (no el padre):

this.getClass().getName() //String like "com.mycompany.myclassname" this.getClass().getSimpleName() //String like "myclassname"

Vea aquí para una discusión más detallada: http://www.coderanch.com/t/324715/java/java/Getting-child-class-name-parent


En lugar de utilizar una instrucción if, debe crear un método abstracto para su lógica condicional. Luego, pida a la clase secundaria que ejecute el código correcto.

Esto también evitará que tenga que modificar la clase base cada vez que cree una nueva clase secundaria.


En su método de creación de súper clase para la condición que es responsable de responder la pregunta, es la subclase de tipo X. En la lógica de procesamiento, use este método para decidir qué bloque de código ejecutar. Cada subclase puede anular el método de decisión y responder según sea necesario. Como resultado, su súper clase no tiene conocimiento acerca de las subclases y las subclases no tienen que preocuparse por la implementación del procesamiento real.

abstract class A { abstract boolean isItX(); void doX() { ... } void doY() { ... } void process() { if (isItX()) { doX(); } else { doY(); } } } class B extends A { boolean isItX() { return true; } } class C extends A { boolean isItX() { return false; } }

Para más información vea el Principio de Hollywood .


También puede usar el método .getClass () del padre y luego verificar de esta forma

if(parent.getClass().equals(childObj.class)){ //to do .. }

Esto básicamente funciona porque devuelve la clase de objeto de tiempo de ejecución. Esto funcionará especialmente en el caso de clases abstractas: lo probé y probé recientemente en mi proyecto.


Utilice el operador instanceof .

Suponiendo que tiene una clase base y dos subclases llamadas Base , SubOne y SubTwo , si desea verificar si una variable ref es una instancia de SubOne o SubTwo diría:

if(ref instanceof SubOne){ } else if(ref instanceof SubTwo){ }

Tenga en cuenta que: (ref instanceof Base) siempre devolverá true aunque.