簡體   English   中英

Java現在聲明,定義后來

[英]Java Declare now, define Later

在java中,您可以在類中聲明一個方法,然后在類中或類外部定義它嗎?

我正在尋找類似於C ++的東西,你聲明它然后在類之外使用:: format來定義它?

此外,不要重載該方法。

C ++成員函數永遠不會在“類外”定義。 Class_Name::前綴將它們放在類中。 他們只是不在班級宣言中

在C ++中需要拆分聲明和定義,因為單獨的編譯模型基於文本文件包含。 無法從編譯的目標文件中提取有關類的詳細信息,因此類型信息的精簡摘要會被分解到頭文件中,並且必須包含該類的所有客戶端模塊。 Java具有更復雜的目標文件格式,這使得可以在沒有頭文件的情況下獲取有關類的信息。

語言中出現的聲明的另一個需要是處理函數之間的相互遞歸或其他形式的循環引用(例如,Wirth的原始Pascal語言中需要它們,它們不支持將程序拆分為單獨的模塊)。 Java可以在不需要前向聲明的情況下完成相互遞歸。 您只需將類型檢查推遲到完整解析。 Pascal中的前向聲明不是為了使相互遞歸成為可能,而是為了能夠在一次傳遞中編譯它,從而可以在編譯下一個函數之前發出一個函數的代碼。 (當您的硬件於1968年建成時,這很重要。)

如果您使用的語言不需要聲明,為什么還要費心尋找將它們放回去的方法呢? 就像你被釋放后繼續吃監獄食物一樣。 (這可能是“習得無助”的一個例子。)

無論如何,幾十年來類型系統的最新技術現在已經被設計盡可能地避免聲明並且依賴於類型推斷。 看看你有多少次用C ++編寫類名來完成任務。 class myclass { public: myclass(); }; myclass::myclass() { /* constructor */ } class myclass { public: myclass(); }; myclass::myclass() { /* constructor */ } myclass四次重復只是為了創建一個什么都不做的虛擬類,使用在類聲明之外定義的構造函數。

你不能用Java做到這一點。 每當您聲明一個非抽象方法時,您還必須定義它。 抽象方法沒有定義,所以它們超出了這個問題的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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