(免責聲明:這不是關於理解abstract class
es和interface
s之間的區別的問題。如果您沒有得到,請再次閱讀標題。我對合同和半實施子系統)。爲什麼在語法層面上區分接口類和抽象類?
讓我們以Java爲例。似乎幾乎不需要一個獨特的關鍵字interface
,從我作爲開發人員的角度來看,編譯器吐出了完全相同的東西,這在人們的說法中是:「直到你得出爲止,才能使用它(通過implements
或extends
)實施其方法的新類「。簡單。
但是有一種情況可能會阻止這兩種情況的混淆:當我們需要implement
多於一個interface
時,由於Java不允許多重繼承(對於class
es)。當然,以這樣的方式構建語言會很簡單:編譯器能夠識別何時存在任何方法體或聲明的變量,並且隨後在適當的情況下不允許使用多種方法或變量。順序的優先順序是否存在問題?
這是我們有這種句法分化的唯一原因嗎?
P.S.我問這個問題的一個原因是,這種情況在理解新的OO程序員方面可能會帶來相當大的挑戰,我認爲在語言層面上以更簡化的方式處理這個問題將大大有助於更快地理解概念差異。
您認爲「編譯器能夠識別何時存在任何方法體或聲明的變量,並且在適當的情況下不允許多實現/擴展」會比要求明確聲明該差異更容易理解嗎? (我真的沒有。) – Mat 2012-07-21 15:32:45
@Mat我明白你的觀點,但我絕對認爲它可以,如果以正確的方式處理。其他人則可以自由地提出這種風格。 – 2012-07-21 15:34:14
也許它可能會,也許不會,但事實並非如此。除非你問吉姆戈斯林,否則你不是問問題的原因。一個反對的觀點是,改變之前沒有實現的東西會讓他們失去所有現有的擴展/實現類,現在只能在運行時檢測到,除非它們被重新編譯:這不是一個有吸引力的選擇。無論這是戈斯林的理由,還是唯一的原因,都是人們的猜測。 – EJP 2012-07-29 07:03:37