微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中的继承

最近我经历了继承概念.

众所周知,在继承中,超类对象是在子类对象之前创建/初始化的.因此,如果我们创建子类的对象,它将包含所有超类信息.

但我一度陷入困境.

超类和子类方法是否存在于单独的调用堆栈中?
如果是这样,有什么具体原因吗?
如果不是这样,为什么它们不会出现在同一个调用堆栈中?

例如.

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

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

那么以上两种方法,即play1()和play2()是否出现在单独的调用堆栈中?

谢谢.

最佳答案
调用堆栈和继承之间不一定存在任何关系.事实上,经常没有.如果在子级中重写了超类方法,则调用子级方法 – 根本不执行超类方法,除非在子方法中有明确执行该操作的代码.超类方法将不会出现在调用堆栈中 – 除非它由子方法显式调用.

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()从不出现在调用堆栈中,永远不会执行.

原文地址:https://www.jb51.cc/java/437667.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐