Java中interface是否繼承Object類


首先我們從C++說起, c++可以多繼承。也就是一個類型 --- class,可以繼承自2個以上的父類型。多繼承導致一個問題,很多人知道。例如,如果類型B,類型C均繼承自類型A。然后類型D繼承自類型B和C。那么構造D的實例的時候,由於要調用父類型的構造方法,最終會調用兩次A的構造方法。結果類型D的實例有兩套祖父的數據,也就是外公和爺爺長的一模一樣,以后使用的時候很麻煩。每次D要和祖父打交道,都要額外的區分到底是外公還是爺爺。 再說,內存里面出現兩套一模一樣的東西,一個用不上,還容易引起混亂,豈不是浪費,又麻煩。 
    所以,java就通過嚴格的單一繼承規則解決了這個問題。.net當然也一樣,單一集成是一個定律。那么有: 
    所有的類型 --- 只能繼承自單一的類型; 
    其次,大家知道,從一個class派生的必然是另一個class。Object是一個class,如果interface繼承自Object,那么interface必然是一個class。那么,如果一個類型實現了一個interface,再有一個基類class, 那么它們的根源都是Object, 也即是這個類的實例也像c++一樣,存在上述的問題。 因此接口肯定不是繼承自Object,否則就違反了單一繼承的定律。 

Java代碼   收藏代碼
  1. Set<String> result = new HashSet<String>();  
  2. for (Method m : Set.class.getMethods())  
  3.     result.add(m.getName());  
  4. System.out.println(result);  


打印結果為:[iterator, toArray, addAll, remove, equals, containsAll, hashCode, contains, add, size, clear, isEmpty, retainAll, removeAll] 
確實不包含Object中的public類型方法,也證明了上述推斷。

 

上文是我在網上看到的一種解釋。

疑問:萬物皆對象,JVM中似乎提到接口和object是有關系的。   其實我覺得這個是sun當初在構建Java語法時候的“語法”問題,暫時理解他們兩者之間存在一種“特別”的關系。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM