簡體   English   中英

Java / C ++對象創建順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM