Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用超类型方法会创建新的超类型对象吗?_Java_Oop - Fatal编程技术网

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。