1、什么是面向對象
Java的編程語言是面向對象的,采用這種語言進行編程稱為面向對象編程(Object-Oriented Programming, OOP)。
面向對象編程的本質就是:以類的方式組織代碼,以對象的組織(封裝)數據。
抽象(abstract)
1 忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用關注細節。 2 例如:要設計一個學生成績管理系統,那么對於學生,只關心他的班級、學號、成績等,而不用去關心他的身高、體重這些信息。 抽象是什么?就是將多個物體共同點歸納出來,就是抽出像的部分!
封裝(Encapsulation)
封裝是面向對象的特征之一,是對象和類概念的主要特性。封裝是把過程和數據包圍起來,對數據的訪 問只能通過指定的方式。
在定義一個對象的特性的時候,有必要決定這些特性的可見性,即哪些特性對外部是可見的,哪些特性 用於表示內部狀態。
通常,應禁止直接訪問一個對象中數據的實際表示,而應通過操作接口來訪問,這稱為信息隱藏。
信息隱藏是用戶對封裝性的認識,封裝則為信息隱藏提供支持。
封裝保證了模塊具有較好的獨立性,使得程序維護修改較為容易。對應用程序的修改僅限於類的內部, 因而可以將應用程序修改帶來的影響減少到最低限度。
繼承(inheritance)
1 繼承是一種聯結類的層次模型,並且允許和支持類的重用,它提供了一種明確表述共性的方法。 2 新類繼承了原始類后,新類就繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。 3 派生類(子類)可以從它的基類(父類)那里繼承方法和實例變量,並且派生類(子類)中可以修改或增加新的方法使之更適合特殊的需要繼承性很好的解決了軟件的可重用性問題。比如說,所有的Windows應用程序都有一個窗口,它們可以看作都是從一個窗口類派生出來的。但是有的應用程序用於文字處理,有的應用程序用於繪圖,這是由於派生出了不同的子類,各個子類添加了不同的特性。
多態(polymorphism)
1 多態性是指允許不同類的對象對同一消息作出響應。 2 多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
相同類域的不同對象,調用相同方法,表現出不同的結果
從認識論角度考慮是先有對象后有類。對象,是具體的事物。類,是抽象的,是對對象的抽象。
從代碼運行角度考慮是先有類后有對象。類是對象的模板。
2、類與對象的關系
類是一種抽象的數據類型,它是對某一類事物整體描述/定義,但是並不能代表某一個具體的事物.
1 例如:我們生活中所說的詞語:動物、植物、手機、電腦等等。這些也都是抽象的概念,而不是指的某一個具體的東西。
例如: Person類、Pet類、Car類等,這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為 對象是抽象概念的具體實例
1 例如:張三就是人的一個具體實例,張三家里的旺財就是狗的一個具體實例。能夠體現出特點,展現出功能的是具體的實例,而不是一個抽象的概念.
【示例】
1 Student s = new Student(1L,"tom",20); 2 s.study(); 3 Car c = new Car(1,"BWM",500000); 4 c.run();
對象s就是Student類的一個實例,對象c就是Car類的一個具體實例,能夠使用的是具體實例,而不是類。類 只是給對象的創建提供了一個參考的模板而已.
但是在java中,沒有類就沒有對象,然而類又是根據具體的功能需求,進行實際的分析,最終抽象出來的.
3、對象和引用的關系
引用 "指向" 對象
使用類類型、數組類型、接口類型聲明出的變量,都可以指向對象,這種變量就是引用類型變量,簡稱引用。
在程序中,創建出對象后,直接使用並不方便,所以一般會用一個引用類型的變量去接收這個對象,這個就是所說的引用指向對象.
總結:對象和引用的關系,就如電視機和遙控器,風箏和線的關系一樣。