Java 调用超类型方法会创建新的超类型对象吗?
给定代码片段:Java 调用超类型方法会创建新的超类型对象吗?,java,oop,Java,Oop,给定代码片段: 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 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
引用。不涉及实例化。不。您不创建任何其他对象
当您扩展一个类并实例化子类时,您已经创建了一个超类型实例加上扩展内容的对象。
虽然您实际上并没有创建两个独立的对象,但是您创建了一个同时是这两个对象的对象(
B是A++
),这也被称为多态性(您有一个可以执行超类型方法的对象)。A
实例创建一次new B()代码>被调用。请记住,派生类与父类处于is-a
关系中。在这里,我们可以说,B
是-a
a
好吧,这要看情况而定。A的构造函数确实运行,并且为A分配了内存。所以我想说是的,A被创造了。但是它是B的一部分,所以没有专门的A来表示B。