簡體   English   中英

為什么類編譯為.class但接口不編譯為.interface

[英]Why classes compile to .class but interface does not to .interface

是否有任何具體原因導致接口未編譯成編譯成.interface文件的MyInterface.java?但是任何類都被編譯成.class文件。

因為要點是指示文件是Java字節代碼 (而.class是為其選擇的擴展名),而不是特定的語言結構。

文件系統上字節代碼的物理表示無關緊要。

重要的是邏輯實現(無論是類還是接口)。

Java將接口視為類似於類,例如它們共享相同的命名空間(您不能擁有與類同名的接口),並且編譯的接口幾乎與編譯的抽象類相同。

因此,將它們以不同的格式存儲或使用不同的文件擴展名是沒有任何意義的。 相反,這會使許多事情變得更難。 例如,當您按名稱加載類或接口(Class.forName(“my.class.name”))時,Java不知道它是類還是接口。 如果有兩個不同的擴展,Java會嘗試找到一個文件“my / class / name.class”,然后是“my / class / name.interface”,而不是只嘗試第一個。

這就是語言設計師決定的方式。

它在幾個方面有意義:

  • .class文件是您通常不會手動查看或操作的副產品。
  • 程序使用的擴展程度越小,維護起來就越容易。
  • 在許多情況下,類和接口之間的代碼沒有區別,因此二進制文件看起來很相似是合乎邏輯的。

坦率地說,我想不出有一個很好的理由對編譯的類和接口有不同的擴展。 為什么區分它們很重要?

在java中,您有源文件,稱為.java和名為.class的二進制文件。 它只是一個命名選擇。

同樣對於java類和接口來說,差別不大(類只包含很多額外的信息,比如方法體)。

這只是他們的選擇。 我不打擾它。 無論如何,它是一個二進制文件。 一種思考方式是“即使它是一個仍然在file.java中的接口”。

暫無
暫無

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

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