1. 程式人生 > >如何理解面向物件思想

如何理解面向物件思想

 我們學習JAVA語言必須要掌握物件和類,這樣的話就可以更深層次的理解JAVA這種面向物件的程式開發理念,從而更好更快握JAVA的變成  思想和方法。掌握類和物件是JAVA語言變成的基礎。那麼,問題來了,到底什麼是物件和類呢?

一:物件

關於物件的理解其實非常簡單。在我們的身邊,每一種事物都是一種物件,統籌一句話概括就是,物件是事物存在的實體。例如:電視、汽車、  書桌、樓房包括我們人類自身都是一種物件。物件的話又劃分為兩種,即靜態和動態兩部分。靜態:顧名思義,指的是不能動的部分。就拿我們自  身來說,每個人的你年齡、性別、身高、體重等都屬於靜態。而這些特徵都可概括為屬性,所有的物件
都具備屬性。動態:即具備這些屬性的人可能  做出的行為和動作(微笑、哭泣、行走、奔跑等)。人類通過探討物件的屬性和觀察物件的行為來了解物件。

二:類

簡單概括,類是封裝物件屬性和行為的載體,反過來說具有相同屬性和行為的一類實體被成為類。舉一個簡單的例子,鳥類。鳥類封裝了所有鳥  的具體屬性(嘴、翅膀、爪子)和具有的行為(飛行、捕食)。這樣說,相信大家都能理解。得意說到物件,不得不重點提一下物件的三個基本特徵:  封裝、繼承、多型。

三:封裝

 定義:隱藏物件的屬性和實現細節,僅對外公開介面,控制在程式中屬性的讀和修改的訪問級別。  封裝的目的:增強安全性和簡化程式設計,使用者不必瞭解具體的實現細節,而只是要通過外部介面,特定的訪問許可權來使用類的成員。
 封裝的基本要求:把所有的屬性私有化,對每個屬性提供get和set方法,如果有一個帶引數的建構函式的話,那一定要寫一個不帶參數的建構函式。在  開發的時候經常要對已經編寫的類進行測試,所有在有的時候還要重寫toString方法,但這不是必須的。

四:繼承(extends)

目的:實現程式碼的複用。 介紹當兩個類具有相同的特徵(屬性)和行為(方法)時,可以將相同的部分抽取出來放到一個類中作為父類,其它兩個類繼承這個父類。繼承後子  類自動擁有了父類的屬性和方法,但特別注意的是,父類的私有屬性(private)和構造方法不能被繼承。另外子類可以寫自己特有的屬性和方法,目  的 是實現功能的擴充套件,子類也可以複寫父類的方法,即方法的重寫。子類不
能繼承父類中訪問許可權private的成員變數和方法。子類可以重寫父類的方  法,  命名與父類同名的成員變數。有的時候我們需要這樣的求:我們需要將某些事物儘可能地對這個世界隱藏起來,但是允許子類的成員來訪問他  們。這  個時候就需要使用protected。 用法:1、找出具有共同屬性和行為的物件。            2、設計代表共同狀態和行為的類。(父類)            3、決定子類是是否需要讓某項行為具有特定不同的運作方式。- - - - - -對繼承的覆蓋(覆寫)。            4、通過尋找使用共同行為的子類找出更多抽象化的機會。            5、完成類的繼承層次化。

五:多型

 概念同一訊息可以根據傳送物件的不同而採用多種不同的行為方式,根據其實際型別呼叫其相應的方法。  實現方式 (1)基於繼承實現的多型  基於繼承的實現機制主要表現在父類和繼承該父類的一個或多個子類對某些方法的重寫,多個子類對同一方法的重寫可以表現出不同的行為。 (2)基於藉口實現的多型

繼承是通過重寫父類的同一方法的幾個不同子類來體現的,那麼就是通過實現介面,覆蓋介面中同一方法中不同的類來體現的。在介面的多型  中,指向介面的引用必須是指定實現了該介面的一個類的例項程式。在執行時,根據物件引用的實際型別來執行對應的方法。繼承都是單繼承,只能  為 一組相關的類提供一直的服務介面,但是介面可以是多繼承多實現,它能夠利用一組相關或者不相關的介面進行組合與擴充,能夠對外提供一致的  服 務介面。所以它相對於繼承來說有更好的靈活性。 好處:程式的可擴充套件性及可維護性增強。

總結:

1.封裝是為了對物與外界交流進行抽象。       2.繼承是為了對物的資訊進行抽象。       3.多型是為了對物的行為進行抽象。 到這裡,給大家稍微擴充套件一下關於抽象介面一些相關資訊。

抽象(abstract)

介紹:在面向物件的概念中,我們知道所有的物件都是通過類來描繪的,但是並不是所有的類都是用來描繪物件的,如果一個類中 沒有包含足夠的資訊來描繪一個具體的物件,這樣的類就是抽象類。抽象類往往用來表示我們在對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把他們例項化(拿不出一個具體 的東西),所以稱之為抽象。 例如:publicabstract void xuesheng ();  關於抽象方法   1、抽象類中可以有抽象方法,也可以有非抽象方法。     2、抽象類中可以全都是非抽象方法。     3、一個抽象類中如果沒有抽象方法,那麼這個類不能例項化,反之如果有抽象方法,那麼這個類一定是抽象類。

介面(interface)

 概念:把原有的事物與功能增強,在不改變類方法的前提下,進一步進行功能擴充套件。  介面歸納       1、在JAVA中介面是一種專門的型別,用關鍵字interface來定義。       2.、介面中只能定義抽象方法,不能有方法體,一定是public修飾。(介面中的方法都是抽象的       3、介面中可以定義變數,但實際上是static final 修飾的變數。       4、介面中不能定義靜態方法。  介面的定義 public interface Interface{

   static final int i;  //介面中不能有普通資料成員,只能夠有靜態的不能被修改的資料成員,static表示全域性,final表示不可修改,可以不用static  final 修飾,會隱式的宣告為static和final

   public void xuesheng1();  //介面中的方法一定是抽象方法,所以不用abstract修飾

   public void xuesheng2();  //介面中不能賦予方法的預設行為,即不能有方法的具體實現
}

抽象與介面的聯絡

 1、一個介面可以被多個類實現,一個類也可以實現多個介面。  2、介面中所有定義的欄位預設都是public static final的屬性,寫不寫沒有區別。  3、介面中的方法都是抽象方法,並且抽象的方法預設都是public abstract修飾的。不能用其他的修飾符修飾,可以不寫。  4、介面中沒有構造方法。  5、介面不是類。尤其不能使用new來例項化一個介面。但是可以宣告介面的變數,這個變數可以指向實現了此介面的子類。        總而言之,抽象類是一種功能不全的類,介面只是一個抽象方法宣告和靜態不能被修改的資料的集合,兩者都不能被例項化。從某種意義上說,介面是一種特殊形式的抽象類,在JAVA語言中抽象類表示的是一種繼承關係,一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。在許多情況下,介面確實可以代替抽象類,前提是你不需要刻意表達屬性上的繼承的話。