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