在學習Java繼承的部分時,就想到進擊巨人的設定,九大巨人的能力只要被其他人吃掉,能力就會被傳承過去,不覺得很像Java的類別繼承嗎哈哈。
不過Java更複雜了一點,因為繼承不會只有單線,而是像樹狀圖般開枝散葉,其中最頂端的源頭就是Object類別。
我們知道在宣告變數時,可以用父類別宣告型態,實際裝入的實例只要是這個父類別的子類別,都可以裝進來:
Number num = new Integer(10);
而Object為最源頭類別的意思,就是只要宣告為Object的變數,他能夠裝進一切的實例,甚至是基本型別:
Object num = new Integer(10);
Object primitive = 10;
作為始祖類別還有一個實質上的意義,那就是所有實例都繼承了Object類別中定義的方法,可以直接呼叫使用。這些方法是必須要認識一下的:
其中最常用到的2個方法是equals(Object obj)、hashCode()和toString();只要有任何程式會用到比較2個物件是否相等時,就會預設去呼叫equals及hashCode,這已經是Java程式的公認規則了,所以不管是官方API或者我們自己下載引用的第三方套件,這些套件的原始碼一定都是呼叫物件的equals和hashCode來進行物件實例相等與否的判斷,原因也很明確,因為Object類別的這2個方法是所有Java實例一定會有的方法。
toString()就比較單純了,它就是我們常用的System.out.println()方法底層原始碼所呼叫的方法,如果我們今天要System.out.println(一個物件),那底層程式就是呼叫這個物件的toString()方法得到代表這個物件的字串,然後印給我們看。