java类和对象实例对象_Java类、对象和实例的理解
最近在看Python,這門面向?qū)ο蟮恼Z言又引起了類的引用、對(duì)象和實(shí)例這些概念之間的糾結(jié),我按照自己的理解總結(jié)了一下Java里三者的關(guān)系,如果有不對(duì)的地方還希望大家指出。
類的引用和對(duì)象的概念沒什么好弄混的,但是對(duì)象和實(shí)例之間的區(qū)別讓人疑惑,在《Thinking in Java》一書里提到:“每個(gè)對(duì)象都是某個(gè)類(class)的一個(gè)實(shí)例,這里類就是類型的意思”。很多地方提到對(duì)象和實(shí)例就是一個(gè)東西,在我理解看來,這種說法不準(zhǔn)確,更準(zhǔn)確的理解是實(shí)例表示的是對(duì)象和類的關(guān)系。
很多地方都拿這個(gè)例子做比方:
Person person=new Person();
這里new Person()新建了一個(gè)Person對(duì)象,而person則是一個(gè)指向Person對(duì)象的引用,這個(gè)Person對(duì)象就是Person類的一個(gè)實(shí)例,于是認(rèn)為實(shí)例和對(duì)象是一樣的概念,在這里,這樣的理解是沒有問題的,但是如果出現(xiàn)了多態(tài)呢?就像下面的代碼所示:
//Child extends Person
Person person = new Child();
按照《Thinking in Java》里的說法,new Child()新建了一個(gè)Child對(duì)象,person是指向這個(gè)Child對(duì)象的引用,而這個(gè)Child對(duì)象應(yīng)該是Person類的一個(gè)實(shí)例。這樣的話,實(shí)例就展示了對(duì)象和類之間的關(guān)系。
在我看來,實(shí)例是對(duì)象實(shí)例化后的結(jié)果,new Child()這個(gè)實(shí)例化過程顯然并沒有將Child類的所有函數(shù)實(shí)例化,因?yàn)閜erson是無法調(diào)用Child類獨(dú)有的方法的,所以只是部分實(shí)例化,這也表現(xiàn)了實(shí)例和對(duì)象之間的區(qū)別。再舉個(gè)例子:動(dòng)物下有狗這種子類,狗有一個(gè)對(duì)象叫做小汪,小汪也是動(dòng)物的一個(gè)實(shí)例,關(guān)鍵是你怎么給小汪劃分類型了。
其實(shí)學(xué)語言沒必要糾結(jié)這些名詞之間的差異的,有些名詞的迷惑都是翻譯的鍋,但是有時(shí)候有些地方的描述讓人不得不理一下名詞之間的區(qū)別,這里只是個(gè)人看法,大家覺得這樣理解沒問題就這樣理解吧。
總結(jié)
以上是生活随笔為你收集整理的java类和对象实例对象_Java类、对象和实例的理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java线程方法_Java线程的三种方式
- 下一篇: java 打包apk_Android A