Java是一種面向?qū)ο蟮某绦蜷_發(fā)語言,準(zhǔn)確的理解java的面向?qū)ο蟛拍芨酶斓卣莆認(rèn)AVA的編程思想和方法,本文達(dá)內(nèi)java培訓(xùn)(java.tedu.cn)專家為大家介紹java面向?qū)ο螅瑤椭蠹腋玫睦斫鈐ava。
1、什么是對象?
首先要說明一點(diǎn),對象不是java的,事實(shí)上他只是一種概念,一種用于解決問題的程序設(shè)計(jì)的思想方法。要理解對象就必須得要和面向?qū)ο蠼Y(jié)合起來。在面向?qū)ο笾邪涯骋活愂挛锼灿械膶傩院托袨槌橄蟪鰜碇缶托纬闪艘粋€(gè)類。而類的一個(gè)實(shí)際的例子就叫做對象。所以從上可以看出類和對象之間存在著這樣一種關(guān)系:類是具有共同的屬性名稱和行為的一組對象的抽象,而對象則是一個(gè)類的真實(shí)的例子。
類是現(xiàn)實(shí)世界或思維世界中的實(shí)體在計(jì)算機(jī)中的反映,它將數(shù)據(jù)以及這些數(shù)據(jù)上的操作封裝在一起。
類描述了具有相同特性(數(shù)據(jù)元素、狀態(tài)變量)和行為(對數(shù)據(jù)元素、狀態(tài)變量的操作)的對象集合,如果我需要某個(gè)具有一定功能的工具,那么我可自定義這個(gè)類,里面有我需要的數(shù)據(jù),還有讓這個(gè)類提供的功能。
對象是具有類類型的變量。類和對象是面向?qū)ο缶幊碳夹g(shù)中的最基本的概念。類是對象的抽象,而對象是類的具體實(shí)例。類是抽象的,不占用內(nèi)存,而對象是具體的,占用存儲空間。類是用于創(chuàng)建對象的藍(lán)圖,它是一個(gè)定義包括在特定類型的對象中的方法和變量的軟件模板。
JAVA是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,對象是由類抽象出來的,所有的問題都是通過對象來處理,對象可以操作類的屬性和方法來解決問題,所以了解對象的產(chǎn)生、操作和消亡是十分必要的。對象可以認(rèn)為是在一類事物中抽象出某一個(gè)特例,通過這個(gè)特例來處理這類事物出現(xiàn)的問題,在Java語言中通過new操作符來創(chuàng)建對象。
2、對象和對象引用
如下表達(dá)式:A a1 = new A;它代表A是類,a1是引用,a1不是對象,new A才是對象,a1引用指向new A這個(gè)對象。
在JAVA里,“=”不能被看成是一個(gè)賦值語句,它不是在把一個(gè)對象賦給另外一個(gè) 對象,它的執(zhí)行過程實(shí)質(zhì)上是將右邊對象的地址傳給了左邊的引用,使得左邊的引用指向了右邊的對象。JAVA表面上看起來沒有指針,但它的引用其實(shí)質(zhì)就是一 個(gè)指針,引用里面存放的并不是對象,而是該對象的地址,使得該引用指向了對象。在JAVA里,“=”語句不應(yīng)該被翻譯成賦值語句,因?yàn)樗鶊?zhí)行的確實(shí)不是 一個(gè)賦值的過程,而是一個(gè)傳地址的過程,被譯成賦值語句會造成很多誤解,譯得不準(zhǔn)確。
再如:A a2;它代表A是類,a2是引用,a2不是對象,a2所指向的對象為空null;
再如:a2 = a1;它代表,a2是引用,a1也是引用,a1所指向的對象的地址傳給了a2(傳址),使得a2和a1指向了同一對象。
綜上所述,可以簡單的記為,在初始化時(shí),“=”語句左邊的是引用,右邊new出來的是對象。
在后面的左右都是引用的“=”語句時(shí),左右的引用同時(shí)指向了右邊引用所指向的對象。再所謂實(shí)例,其實(shí)就是對象的同義詞。
3、Java繼承性分析
繼承是面向?qū)ο笞铒@著的一個(gè)特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數(shù)據(jù)屬性和行為,并能擴(kuò)展新的能力。Java繼承是使用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術(shù)使得復(fù)用以前的代碼非常容易,能夠大大縮短開發(fā)周期,降低開發(fā)費(fèi)用。
繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因?yàn)樗试S創(chuàng)建分等級層次的類。繼承可以理解為一個(gè)對象從另一個(gè)對象獲取屬性的過程。如果類A是類B的父類,而類B是類C的父類,我們也稱C是A的子類,類C是從類A繼承而來的。在Java中,類的繼承是單一繼承,也就是說,一個(gè)子類只能擁有一個(gè)父類。繼承中最常使用的兩個(gè)關(guān)鍵字是extends(IS-A,是一個(gè)什么東西)和implements(Has-A,有一個(gè)什么功能)。這兩個(gè)關(guān)鍵字的使用決定了一個(gè)對象和另一個(gè)對象是否是IS-A(是一個(gè))關(guān)系。
達(dá)內(nèi)java培訓(xùn)(java.tedu.cn)專家提醒大家,通過使用這兩個(gè)關(guān)鍵字,我們能實(shí)現(xiàn)一個(gè)對象獲取另一個(gè)對象的屬性。所有Java的類均是由java.lang.Object類繼承而來的,所以O(shè)bject是所有類的祖先類,而除了Object外,所有類必須有一個(gè)父類。通過extends關(guān)鍵字可以申明一個(gè)類是繼承另外一個(gè)類而來的,通過使用關(guān)鍵字extends,子類可以繼承父類所有的方法和屬性,但是無法使用private(私有)的方法和屬性。我們通過使用instanceof操作符,能夠確定子類IS-A父類。