Наследование в Java - PullRequest
5 голосов
/ 18 мая 2010

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

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

Но я застрял в одной точке.

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

Е.Г.

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

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

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

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

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 () никогда не появляется в стеке вызовов и никогда не выполняется.

2 голосов
/ 18 мая 2010

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

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

...