Наследование в Java

недавно я прошел понятие наследования.

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

Но я застрял однажды.

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

Например.

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

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

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

Спасибо.

5
задан 18 May 2010 в 15:47
поделиться

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

2
ответ дан 15 December 2019 в 00:52
поделиться

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

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

2
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: