我有一個簡單的問題:因爲所有類都從Object類擴展,因此Java中的多繼承?
如果我聲明一個類A - 意味着這個類隱式地從Object類繼承。現在
如果B類從類繼承的
這是B級也不會從Object類繼承?
如果是的話,這是否意味着寫關鍵字'擴展'一些如何重寫隱式繼承(從類Object)?
我有一個簡單的問題:因爲所有類都從Object類擴展,因此Java中的多繼承?
如果我聲明一個類A - 意味着這個類隱式地從Object類繼承。現在
如果B類從類繼承的
這是B級也不會從Object類繼承?
如果是的話,這是否意味着寫關鍵字'擴展'一些如何重寫隱式繼承(從類Object)?
所有類延伸形式Object
,隱式或顯式地,直接或間接地,在Java整個類層次結束在Object
指向,這是在根目錄下。例如,當你這樣寫:
public class MyClass extends Object {
是完全一樣的:
public class MyClass {
如果我們有這樣的:
public class MySubClass extends MyClass {
然後MySubClass
從MyClass
從擴展延伸Object
。它是一種傳遞式繼承關係,它只發生在一個方向上:層次結構中的任何一點都可能有一個類從多個類擴展 - 這就是爲什麼我們說在Java中我們有單一繼承(相反到:多重繼承。)
A
繼承自Object
和B
繼承自A
。所以你有3個級別的繼承(2顯式)。這裏沒有多重繼承。
`Object`
|
`A`
|
`B`
所以B類不是繼承Object direct !! hmm .... – GV1234
@ GV1234它不需要,因爲'A'正在擴展它。 –
當你'擴展'時,你的類從基類中獲取所有東西並添加額外的東西。因此,如果A擴展了對象,那麼您已經獲得了A中的所有對象。如果B擴展A,則它將獲得全部具有所有對象的A。所以,B現在有對象,A和B中的任何東西。
多的傳承是當你在一次從很多事情擴展類:
public class M extends SomeBase, AndAnotherBase {
這在Java中是不允許的。它在允許它的語言中增加了複雜性,因爲你最終可能得到的類M由SomeBase,AndAnotherBase組成,並且如果它們都已經從Object派生出來...... M將會有2個對象。這開始變得棘手,因爲你必須知道你正在處理的M內的哪個對象。
您特別提到繼承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
- 這是多餘的。但是,繼承機制並沒有什麼不同。
這裏你會得到更好的答案https://stackoverflow.com/questions/17897244/multiple-inheritance-and-class-object –