最近我经历了继承概念.
众所周知,在继承中,superclass对象是在subclass对象之前创建/初始化的.因此,如果我们创建一个对象subclass,它将包含所有超类信息.
但我一度陷入困境.
超类和子类方法是否存在于单独的调用堆栈中?如果是这样,有没有specific reason相同的?如果不是这样,为什么它们不会出现在同一个调用堆栈中?
例如
// Superclass
class A {
void play1( ) {
// ....
}
}
// Subclass
class B extends A {
void play2( ) {
//.....
}
}
Run Code Online (Sandbox Code Playgroud)
然后确实上述2种方法,即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
Run Code Online (Sandbox Code Playgroud)
A.play2() 仅在“第二次调用”期间出现在调用堆栈上。B.play1() 仅在“第一次调用”期间出现在调用堆栈上。A.play1() 永远不会出现在调用堆栈上,也永远不会被执行。
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |