2010-05-18 11 views
5

Recientemente pasé por el concepto de herencia.Herencia en Java

Como todos sabemos, en herencia, los objetos superclass se crean/inicializan antes de los objetos subclass. Entonces, si creamos un objeto de subclass, contendrá toda la información de la superclase.

Pero me quedé atascado en un punto.

¿Los métodos de la superclase y la subclase están presentes en la pila de llamadas separada? Si es así, ¿hay alguna specific reason para lo mismo? Si no es así, ¿por qué no aparecen en la misma pila de llamadas?

E.g.

// Superclass 
class A { 
    void play1() { 
     // .... 
    } 
} 

// Subclass 
class B extends A { 
    void play2() { 
     //..... 
    } 
} 

luego hace los 2 métodos anteriores es decir play1() y play2() aparecen en la pila de llamadas por separado?

Gracias.

+0

¿Tiene alguna razón para pensar que * podría * estar en diferentes pilas? Dado que hay una necesidad definida de que la superclase init haya terminado por completo antes de la subclase init, de todos modos es serial, ¿no? – CPerkins

Respuesta

2

No existe necesariamente ninguna relación entre una pila de llamadas y la herencia. De hecho, con frecuencia no hay. Si se invalida un método de superclase en un niño, entonces se llama al método del niño; el método de la superclase no se ejecuta en absoluto, a menos que exista un código para hacerlo explícitamente en el método secundario. El método de la superclase no aparecerá en la pila de llamadas, a menos que el método secundario lo llame explícitamente.

class A { 
    void play1() { 
    //... 
    } 
    void play2() { 
    //.... 
    } 
} 
class B extends A { 
    void play1() { 
    //... 
    } 
} 
B b = new B(); 
b.play1(); // 'first' call 
b.play2(); // 'second' call 

A.play2() aparece en la pila de llamadas sólo durante la "segunda llamada". B.play1() aparece en la pila de llamadas solo durante "primera llamada". A.play1() nunca aparece en la pila de llamadas y nunca se ejecuta.

+0

Ok! Quiere decir que el método de la superclase solo aparece cuando es llamado por el objeto de la subclase explícitamente. –

2

Solo hay una pila de llamadas por subproceso, por lo que no, ambas llamadas playX se producen en la misma pila.

No estoy seguro de por qué crees que no lo harían, o qué tiene que ver con la herencia. Quizás si usted dio un ejemplo específico de por qué cree que esto es importante (es decir, un caso en el que el comportamiento sería notablemente diferente) ayudaría a abordar lo que presumiblemente es un problema más profundo.