[英]Java/C++ Object creation order
Please take a look at the following piece of code: 请看下面的代码:
class Parent {
Parent() {
printFunction();
}
public void printFunction() {
System.out.println("Parent Print");
}
class ParentInner {
ParentInner() {
InnerPrint();
}
void InnerPrint() {
System.out.println("Parent Inner print");
}
}
}
class Child extends Parent {
ChildInner ci;
Child() {
super();
ci = new ChildInner();
}
@Override
public void printFunction() {
System.out.println("Child Print");
}
class ChildInner extends ParentInner {
ChildInner() {
super();
}
@Override
void InnerPrint() {
System.out.println("Child Inner print");
}
}
public static void main(String[] args) {
Child c = new Child();
}
}
The output of this code from a Java compiler (both eclipse and linux) is: 来自Java编译器(eclipse和linux)的此代码的输出为:
Child print
Child Inner print
This, in C++ (gcc) 在C ++(gcc)中
#include <iostream>
#include <new>
using namespace std;
class Parent {
public:
Parent() {
printFunction();
}
virtual void printFunction() {
cout << "Parent print\n";
}
class ParentInner {
public:
ParentInner() {
InnerPrint();
}
virtual void InnerPrint() {
cout << "Parent Inner print\n";
}
};
};
class Child : public Parent {
public:
Child():Parent() {
ci = new ChildInner();
}
void printFunction() {
cout << "Child print\n";
}
class ChildInner : public ParentInner {
public:
ChildInner():ParentInner() {
}
void InnerPrint() {
cout << "Child Inner print\n";
}
};
ChildInner *ci;
};
int main(int argc, char* argv[]) {
Child *c = new Child();
return 0;
}
prints: 印刷品:
Parent print
Parent Inner print
What say? 说啥? I think the base class gets created first, then the child- gcc is logical. 我认为首先创建基类,然后创建子gcc是合乎逻辑的。 What's up in Java? Java发生了什么?
It's as you suspect. 就像你怀疑的那样。 When you call the Parent
constructor from the Child
constructors initializer list, the Child
object is not fully created yet. 当您从“ Child
构造函数初始化器列表中调用“ Parent
Child
构造器时,“ Child
对象尚未完全创建。 So in a way there is no Child
object yet, just the Parent
object. 因此,在某种程度上,还没有Child
对象,只有Parent
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.