2013-12-16 70 views
4

我有一個簡單的問題:因爲所有類都從Object類擴展,因此Java中的多繼承?

如果我聲明一個類A - 意味着這個類隱式地從Object類繼承。現在

如果B類從類繼承的

這是B級也不會從Object類繼承?

如果是的話,這是否意味着寫關鍵字'擴展'一些如何重寫隱式繼承(從類Object)?

+0

這裏你會得到更好的答案https://stackoverflow.com/questions/17897244/multiple-inheritance-and-class-object –

回答

11

所有類延伸形式Object,隱式或顯式地,直接或間接地,在Java整個類層次結束在Object指向,這是在根目錄下。例如,當你這樣寫:

public class MyClass extends Object { 

是完全一樣的:

public class MyClass { 

如果我們有這樣的:

public class MySubClass extends MyClass { 

然後MySubClassMyClass從擴展延伸Object。它是一種傳遞式繼承關係,它只發生在一個方向上:層次結構中的任何一點都可能有一個類從多個類擴展 - 這就是爲什麼我們說在Java中我們有單一繼承(相反到:多重繼承。)

4

A繼承自ObjectB繼承自A。所以你有3個級別的繼承(2顯式)。這裏沒有多重繼承。

`Object` 
    | 
    `A` 
    | 
    `B` 
+0

所以B類不是繼承Object direct !! hmm .... – GV1234

+1

@ GV1234它不需要,因爲'A'正在擴展它。 –

1

當你'擴展'時,你的類從基類中獲取所有東西並添加額外的東西。因此,如果A擴展了對象,那麼您已經獲得了A中的所有對象。如果B擴展A,則它將獲得全部具有所有對象的A。所以,B現在有對象,A和B中的任何東西。

多的傳承是當你在一次從很多事情擴展類:

public class M extends SomeBase, AndAnotherBase { 

這在Java中是不允許的。它在允許它的語言中增加了複雜性,因爲你最終可能得到的類M由SomeBase,AndAnotherBase組成,並且如果它們都已經從Object派生出來...... M將會有2個對象。這開始變得棘手,因爲你必須知道你正在處理的M內的哪個對象。

1

您特別提到繼承Object,但是如果您問的是子女與孫子女之間的一般繼承問題,那麼B會繼承所有前輩。

public class A{ 
    public String getAString(){ 
     return "Hello from A"; 
    } 
} 


public class B extends A { 
    public String getBString(){ 
     return getAString() + " and Hello from B."; 
    } 
} 


public class C extends B{ 
} 

public class Main{ 
    public static void main(String[] args){ 
     C c = new C(); 
     //     Inherited from A   Inherited from B 
     System.out.println(c.getAString() + "..." + c.getBString()); 
    } 
} 

這給

Hello from A...Hello from A and Hello from B. 

通知C在類體沒有代碼。所有功能都被繼承。

Object繼承是有點特別的,因爲它是隱含的。沒有必要在任何課程上說extends Object - 這是多餘的。但是,繼承機制並沒有什麼不同。

相關問題