Java是一種面向對象的程序開(kāi)發(fā)語(yǔ)言,準確的理解java的面向對象才能更好更快地掌握JAVA的編程思想和方法,本文鄭州尚學(xué)堂Java培訓專(zhuān)家為大家介紹java面向對象,幫助大家更好的理解java。
1、什么是對象?
首先要說(shuō)明一點(diǎn),對象不是java的,事實(shí)上他只是一種概念,一種用于解決問(wèn)題的程序設計的思想方法。要理解對象就必須得要和面向對象結合起來(lái)。在面向對象中把某一類(lèi)事物所共有的屬性和行為抽象出來(lái)之后就形成了一個(gè)類(lèi)。而類(lèi)的一個(gè)實(shí)際的例子就叫做對象。所以從上可以看出類(lèi)和對象之間存在著(zhù)這樣一種關(guān)系:類(lèi)是具有共同的屬性名稱(chēng)和行為的一組對象的抽象,而對象則是一個(gè)類(lèi)的真實(shí)的例子。
類(lèi)是現實(shí)世界或思維世界中的實(shí)體在計算機中的反映,它將數據以及這些數據上的操作封裝在一起。
類(lèi)描述了具有相同特性(數據元素、狀態(tài)變量)和行為(對數據元素、狀態(tài)變量的操作)的對象集合,如果我需要某個(gè)具有一定功能的工具,那么我可自定義這個(gè)類(lèi),里面有我需要的數據,還有讓這個(gè)類(lèi)提供的功能。
對象是具有類(lèi)類(lèi)型的變量。類(lèi)和對象是面向對象編程技術(shù)中的最基本的概念。類(lèi)是對象的抽象,而對象是類(lèi)的具體實(shí)例。類(lèi)是抽象的,不占用內存,而對象是具體的,占用存儲空間。類(lèi)是用于創(chuàng )建對象的藍圖,它是一個(gè)定義包括在特定類(lèi)型的對象中的方法和變量的軟件模板。
JAVA是一種面向對象的程序設計語(yǔ)言,對象是由類(lèi)抽象出來(lái)的,所有的問(wèn)題都是通過(guò)對象來(lái)處理,對象可以操作類(lèi)的屬性和方法來(lái)解決問(wèn)題,所以了解對象的產(chǎn)生、操作和消亡是十分必要的。對象可以認為是在一類(lèi)事物中抽象出某一個(gè)特例,通過(guò)這個(gè)特例來(lái)處理這類(lèi)事物出現的問(wèn)題,在Java語(yǔ)言中通過(guò)new操作符來(lái)創(chuàng )建對象。
2、對象和對象引用
如下表達式:A a1 = new A;它代表A是類(lèi),a1是引用,a1不是對象,new A才是對象,a1引用指向new A這個(gè)對象。
在JAVA里,“=”不能被看成是一個(gè)賦值語(yǔ)句,它不是在把一個(gè)對象賦給另外一個(gè)對象,它的執行過(guò)程實(shí)質(zhì)上是將右邊對象的地址傳給了左邊的引用,使得左邊的引用指向了右邊的對象。JAVA表面上看起來(lái)沒(méi)有指針,但它的引用其實(shí)質(zhì)就是一個(gè)指針,引用里面存放的并不是對象,而是該對象的地址,使得該引用指向了對象。在JAVA里,“=”語(yǔ)句不應該被翻譯成賦值語(yǔ)句,因為它所執行的確實(shí)不是一個(gè)賦值的過(guò)程,而是一個(gè)傳地址的過(guò)程,被譯成賦值語(yǔ)句會(huì )造成很多誤解,譯得不準確。
再如:A a2;它代表A是類(lèi),a2是引用,a2不是對象,a2所指向的對象為空null;
再如:a2 = a1;它代表,a2是引用,a1也是引用,a1所指向的對象的地址傳給了a2(傳址),使得a2和a1指向了同一對象。
綜上所述,可以簡(jiǎn)單的記為,在初始化時(shí),“=”語(yǔ)句左邊的是引用,右邊new出來(lái)的是對象。
在后面的左右都是引用的“=”語(yǔ)句時(shí),左右的引用同時(shí)指向了右邊引用所指向的對象。再所謂實(shí)例,其實(shí)就是對象的同義詞。
3、Java繼承性分析
繼承是面向對象最顯著(zhù)的一個(gè)特性。繼承是從已有的類(lèi)中派生出新的類(lèi),新的類(lèi)能吸收已有類(lèi)的數據屬性和行為,并能擴展新的能力。Java繼承是使用已存在的類(lèi)的定義作為基礎建立新類(lèi)的技術(shù),新類(lèi)的定義可以增加新的數據或新的功能,也可以用父類(lèi)的功能,但不能選擇性地繼承父類(lèi)。這種技術(shù)使得復用以前的代碼非常容易,能夠大大縮短開(kāi)發(fā)周期,降低開(kāi)發(fā)費用。
繼承是java面向對象編程技術(shù)的一塊基石,因為它允許創(chuàng )建分等級層次的類(lèi)。繼承可以理解為一個(gè)對象從另一個(gè)對象獲取屬性的過(guò)程。如果類(lèi)A是類(lèi)B的父類(lèi),而類(lèi)B是類(lèi)C的父類(lèi),我們也稱(chēng)C是A的子類(lèi),類(lèi)C是從類(lèi)A繼承而來(lái)的。在Java中,類(lèi)的繼承是單一繼承,也就是說(shuō),一個(gè)子類(lèi)只能擁有一個(gè)父類(lèi)。繼承中最常使用的兩個(gè)關(guān)鍵字是extends(IS-A,是一個(gè)什么東西)和implements(Has-A,有一個(gè)什么功能)。這兩個(gè)關(guān)鍵字的使用決定了一個(gè)對象和另一個(gè)對象是否是IS-A(是一個(gè))關(guān)系。
鄭州尚學(xué)堂Java培訓專(zhuān)家提醒大家,通過(guò)使用這兩個(gè)關(guān)鍵字,我們能實(shí)現一個(gè)對象獲取另一個(gè)對象的屬性。所有Java的類(lèi)均是由類(lèi)繼承而來(lái)的,所以Object是所有類(lèi)的祖先類(lèi),而除了Object外,所有類(lèi)必須有一個(gè)父類(lèi)。通過(guò)extends關(guān)鍵字可以申明一個(gè)類(lèi)是繼承另外一個(gè)類(lèi)而來(lái)的,通過(guò)使用關(guān)鍵字extends,子類(lèi)可以繼承父類(lèi)所有的方法和屬性,但是無(wú)法使用private(私有)的方法和屬性。我們通過(guò)使用instanceof操作符,能夠確定子類(lèi)IS-A父類(lèi)。