java里的类:为什么只能继承一个类,而可以实现多个接口?
PHPz
PHPz 2017-04-17 17:30:02
0
4
615

1、java官方教程里有一段话,解释了原因:
One reason why the Java programming language does not permit you to extend more than one class is to avoid the issues of multiple inheritance of state, which is the ability to inherit fields from multiple classes. For example, suppose that you are able to define a new class that extends multiple classes. When you create an object by instantiating that class, that object will inherit fields from all of the class's superclasses. What if methods or constructors from different superclasses instantiate the same field? Which method or constructor will take precedence? Because interfaces do not contain fields, you do not have to worry about problems that result from multiple inheritance of state.

http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html

2、问题是这段话我没看懂啊,我操。
真的认认真真看了,而且这个教程一节一节看下来,没看懂的地方实在不多啊——可是这么关键性的这一段,居然看不懂啊我操。

3、大伙都抡起袖子来解释一番呗~

PHPz
PHPz

学习是最好的投资!

全部回覆(4)
伊谢尔伦

public Class A 有public int i=0, some() {i=1;}
public Class B 有public int i=0, some() {i=2;}
public Class C 有public int i=0 , extends A,B
現在C實例化c,執行c.some(), i=?
不允許繼承多類,就是為了避免繼承多父類,在調用相同方法或者構造函數時賦值同一個成員變量時,凌亂了...

小葫芦

說一下我的理解,有誤請指出
不允許多重extends的理由是為了避免多重繼承,如果允許多重繼承,那麼就可以獲得多個被繼承者的變數。假如你定義一個類別繼承多個class, 當你透過建立方法得到一個實例時,這個實例會得到所有被它extends也就是所有父類別的變數/方法,如果多個父類別有同一個變量,那將造成混亂。介面沒有變量,則沒有以上的矛盾。

迷茫

除了上面講到的,單繼承還可以避免多繼承帶來的鑽石問題。

Peter_Zhu

我覺得 繼承 應該是體現一個物件應有的特徵(屬性)和行為(方法)。
按照物件導向程式設計方式思考:
父類別集合了子類別的所有共同特徵和行為。
子類別擁有父類別的所有"公共"的特徵和行為。
這樣體現了一個類別之間的層次結構,也解決了對系統的描述過度到用程式碼對系統進行描述。
以上個人純屬理解。 如有誤導,接受指點。
參考資料:java面向程式設計第4版

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板