2010-05-18 2 views
5

Недавно я прошел концепцию наследования.Наследование в Java

Как мы все знаем, в наследовании superclass объекты создаются/инициализируются до subclass объектов. Поэтому, если мы создадим объект subclass, он будет содержать всю информацию о суперклассе.

Но я застрял в одном месте.

Выполняется ли надкласс и методы подкласса в отдельном стеке вызовов? Если да, то есть specific reason для этого же? Если это не так, почему они не появляются в одном стеке вызовов?

E.g.

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

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

Затем делает вышеуказанные 2 метода play1() и то есть play2() появляются на отдельном стеке вызовов?

Спасибо.

+0

У вас есть причина думать, что они могут быть на разных стеках? Учитывая, что существует определенная потребность в том, чтобы суперкласс-init полностью завершил работу перед подклассом init, он все равно серийный, нет? – CPerkins

ответ

2

Между стеком вызовов и наследованием нет необходимости. На самом деле часто нет. Если метод суперкласса переопределяется в дочернем элементе, то это метод ребенка, который вызывается - метод суперкласса вообще не выполняется, если только код явно не выполняет это в дочернем методе. Метод суперкласса вообще не будет отображаться в стеке вызовов, если он явно не указан детским методом.

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() появляется в стеке вызовов только во время «второго вызова». B.play1() отображается в стеке вызовов только во время «первого вызова». A.play1() никогда не появляется в стеке вызовов и никогда не выполняется.

+0

Хорошо! вы хотите сказать, что метод суперкласса появляется только тогда, когда он вызван объектом подкласса явно. – 2010-05-18 16:01:25

2

В потоке есть только один стек вызовов, поэтому нет, оба вызова playX происходят в одном стеке.

Я не уверен, почему вы думаете, что это не так, или что это связано с наследованием. Возможно, если бы вы дали конкретный пример того, почему вы считаете, что это важно (например, случай, когда поведение будет заметно отличаться), это поможет решить проблему, которая, по-видимому, является более глубокой.

Смежные вопросы