2011-07-31 9 views
6

Cuando reemplazar un método en una subclase, que llamamos el método de la superclase dentro de este método, por ejemplo:métodos Android primordiales

protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    width = w ; 
    height = h ; 

    Log.d(TAG, "onSizeChanged: width " + width + ", height "+ height); 

    super.onSizeChanged(w, h, oldw, oldh); 
} 

Entonces, ¿por qué es necesario llamar super.onSizeChanged()?

Elimino la línea super.onSizeChanged(), y el resultado es el mismo que con él.

O lo mismo en el método onCreate, llamamos super.onCreate().

Respuesta

1

Existen ciertos métodos que hacen cosas esenciales, como métodos de actividad onCreate y onPause. Si los reemplaza sin llamar al súper método, esas cosas no sucederán y la actividad no funcionará como debería. En otros casos (por lo general, cuando implementa una interfaz), no hay implementación que anule, solo declaración y, por lo tanto, no es necesario llamar al método super.

Una cosa más, a veces se sobreescribe un método y su propósito es cambiar el comportamiento del método original, no extenderlo. En esos casos, no debe llamar al método súper. Un ejemplo para eso es el método de pintura de componentes oscilantes.

1

Para algún método debes llamar al método súper para iniciar algún objeto o variable (de lo contrario obtendrás una excepción de sobrenombre), para otros puedes llamarlo pero tienes que tenerlo.

+0

¿Alguien puede explicar más profundidad?) –

2

En la programación orientada a objetos, los usuarios pueden heredar las propiedades y el comportamiento de una superclase en subclases. Una subclase puede anular los métodos de su superclase, sustituyendo su propia implementación del método para la implementación de la superclase.

A veces, el método de sustitución reemplazará por completo la funcionalidad correspondiente en la superclase, mientras que en otros casos, el método de la superclase aún se debe invocar desde el método de anulación. Por lo tanto, la mayoría de los lenguajes de programación requieren que un método de anulación debe llamar explícitamente al método reemplazado en la superclase para que se ejecute.

0

Hay muchas cosas que la API de Android estaría haciendo en el onCreate (o cualquier otra on_ _ ___) Método de que la clase de actividad.

Ahora, cuando anule el método, se usará su implementación en lugar de la que está en la clase de actividad mientras se ejecuta la actividad, ya que para eso se usa la anulación. Anula la implementación del padre (es decir, la clase de actividad) y la reemplaza con la implementación del niño (es decir, su clase).

Así que Android aplica esta regla de que siempre necesita llamar a la implementación del padre además de a su propia implementación para que la implementación del padre (que contiene muchas cosas importantes) permanezca intacta además de su implementación.

Espero que esto sea lo suficientemente elaborado y que las marcas sean claras.

Cuestiones relacionadas