回覆列表
  • 1 # 使用者5540256312630

    預設繼承。

    如果在建立類的時候沒有宣告要繼承的類 那麼java就預設 把它繼承Object類

    public class A{

    /*Code*/

    }

    public class A extends java.lang.Object{

    /*Code*/

    }

    以上兩種的等價的public class Test // 從Object類繼承

    {

    public static void main(String[] args)

    {

    System.out.println(new Test().toString());

    }

    }

    從上面的程式碼可以看出,實際上,Test類的父類就是Object,因此,在Test中可以使用Object類的public或protected資源,如toString方法。那麼Java編譯器和JVM到底是如何做的呢?

    瞭解這個原因其實並不需要知道JVM的實現細節。只要思考一下對於這種虛擬機器程式的原理即可。一般對於這種靠虛擬機器執行的語言(如Java、C#等)會有兩種方法處理預設繼承問題。

    1、在編譯原始碼時,當遇到沒有父類的類時,編譯器會將其指定一個預設的父類(一般為Object),而虛擬機器在處理到這個類時,由於這個類已經有一個預設的父類了,因此,VM仍然會按著常規的方法來處理每一個類。對於這種情況,從編譯後的二進位制角度來看,所有的類都會有一個父類。

    2、編譯器仍然按著實際程式碼進行編譯,並不會做額外的處理。如果一個類沒有顯式地繼承於其他的類,編譯後的程式碼仍然沒有父類。然後由虛擬機器執行二進位制程式碼時,當遇到沒有父類的類時,就會自動將這個類看成是Object類的子類(一般這類語言的預設父類都是Object)。

    從上面兩種情況可以看出,第1種情況是在編譯器上做的文章,也就是說,當沒有父類時,由編譯器在編譯時自動為其指定一個父類。第2種情況是在虛擬機器上做文章,也就是這個預設的父類是由虛擬機器來新增的。

  • 中秋節和大豐收的關聯?
  • 遙控飛機遙控上有個PRO和NORM是什麼意思?