[英]Java/C++ Object creation order
請看下面的代碼:
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();
}
}
來自Java編譯器(eclipse和linux)的此代碼的輸出為:
Child print
Child Inner print
在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;
}
印刷品:
Parent print
Parent Inner print
說啥? 我認為首先創建基類,然后創建子gcc是合乎邏輯的。 Java發生了什么?
就像你懷疑的那樣。 當您從“ Child
構造函數初始化器列表中調用“ Parent
Child
構造器時,“ Child
對象尚未完全創建。 因此,在某種程度上,還沒有Child
對象,只有Parent
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.