1. 程式人生 > >Java類、物件和例項的理解

Java類、物件和例項的理解

  最近在看Python,這門面向物件的語言又引起了類的引用、物件和例項這些概念之間的糾結,我按照自己的理解總結了一下Java裡三者的關係,如果有不對的地方還希望大家指出。
  類的引用和物件的概念沒什麼好弄混的,但是物件和例項之間的區別讓人疑惑,在《Thinking in Java》一書裡提到:“每個物件都是某個類(class)的一個例項,這裡類就是型別的意思”。很多地方提到物件和例項就是一個東西,在我理解看來,這種說法不準確,更準確的理解是例項表示的是物件和類的關係
  很多地方都拿這個例子做比方:

Person person = new Person();

這裡new Person()新建了一個Person物件,而person則是一個指向Person物件的引用,這個Person物件就是Person類的一個例項,於是認為例項和物件是一樣的概念,在這裡,這樣的理解是沒有問題的,但是如果出現了多型呢?就像下面的程式碼所示:

//Child extends Person
Person person = new Child();

按照《Thinking in Java》裡的說法,new Child()新建了一個Child物件,person是指向這個Child物件的引用,而這個Child物件應該是Person類的一個例項。這樣的話,例項就展示了物件和類之間的關係。
  在我看來,例項是物件例項化後的結果,new Child()這個例項化過程顯然並沒有將Child類的所有函式例項化,因為person是無法呼叫Child類獨有的方法的,所以只是部分例項化,這也表現了例項和物件之間的區別。再舉個例子:動物下有狗這種子類,狗有一個物件叫做小汪,小汪也是動物的一個例項,關鍵是你怎麼給小汪劃分型別了。
  其實學語言沒必要糾結這些名詞之間的差異的,有些名詞的迷惑都是翻譯的鍋,但是有時候有些地方的描述讓人不得不理一下名詞之間的區別,這裡只是個人看法,大家覺得這樣理解沒問題就這樣理解吧。