调用超类型方法会创建一个新的超类型对象吗?
Will invoking supertype methods create a new supertype object?
给定代码片段:
class A {
public String foo() {
}
}
class B extends A {
public String foo() {
super.foo();
}
}
调用时会发生什么:
B b = new B();
b.foo();
是否内部创建了A
对象,只是为了调用A.foo()
?
super.method()
语法禁用常规动态方法分派机制并显式调用为此对象的超类定义的方法,传入相同的 this
引用。不涉及实例化。
否。您没有创建任何其他对象。
当您扩展 class 并实例化子对象时,您已经创建了一个对象,该对象是超类型实例加上您的扩展内容。
虽然您实际上并没有创建两个单独的对象,但您创建了一个同时具有 (B is A++
) 的对象,也称为 多态性 (您有一个可以执行超类型方法的对象).
A
实例在调用 new B();
后创建。请记住,派生 class 与父 class 存在 is-a
关系。在这里,可以说 B
is-a
A
.
给定代码片段:
class A {
public String foo() {
}
}
class B extends A {
public String foo() {
super.foo();
}
}
调用时会发生什么:
B b = new B();
b.foo();
是否内部创建了A
对象,只是为了调用A.foo()
?
super.method()
语法禁用常规动态方法分派机制并显式调用为此对象的超类定义的方法,传入相同的 this
引用。不涉及实例化。
否。您没有创建任何其他对象。
当您扩展 class 并实例化子对象时,您已经创建了一个对象,该对象是超类型实例加上您的扩展内容。
虽然您实际上并没有创建两个单独的对象,但您创建了一个同时具有 (B is A++
) 的对象,也称为 多态性 (您有一个可以执行超类型方法的对象).
A
实例在调用 new B();
后创建。请记住,派生 class 与父 class 存在 is-a
关系。在这里,可以说 B
is-a
A
.