面向對象是一種思想,是基於面向過程而言的,就是說面向對象是將功能等通過對象來實現,將功能封裝進對象之中,讓對象去實現具體的細節;這種思想是將數據作為第一位,而方法或者說是算法作為其次,這是對數據一種優化,操作起來更加的方便,簡化了過程。面向對象有三大特征:封裝性、繼承性、多態性,其中封裝性指的是隱藏了對象的屬性和實現細節,僅對外提供公共的訪問方式,這樣就隔離了具體的變化,便於使用,提高了復用性和安全性。對於繼承性,就是兩種事物間存在着一定的所屬關系,那么繼承的類就可以從被繼承的類中獲得一些屬性和方法;這就提高了代碼的復用性。繼承是作為多態的前提的。多態是說父類或接口的引用指向了子類對象,這就提高了程序的擴展性,也就是說只要實現或繼承了同一個接口或類,那么就可以使用父類中相應的方法,提高程序擴展性,但是多態有一點不好之處在於:父類引用不能訪問子類中的成員。
舉例來說:就是:比如說你要去飯店吃飯,你只需要飯店,找到飯店的服務員,跟她說你要吃什么,然后就會給你做出來讓你吃,你並不需要知道這個飯是怎么錯做的,你只需要面向這個服務員,告訴他你要吃什么,然后他也只需要面向你吃完收到錢就好,不需要知道你怎么對這個飯進行吃。
1、特點:
1:將復雜的事情簡單化。
2:面向對象將以前的過程中的執行者,變成了指揮者。
3:面向對象這種思想是符合現在人們思考習慣的一種思想。
2、面向對象的三大特征:封裝,繼承、多態
1.封裝:只隱藏對象的屬性和實現細節,僅對外提供公共訪問方式
好處:將變化隔離、便於使用、提高復用性、提高安全性
原則:將不需要對外提供的內容隱藏起來;把屬性隱藏,提供公共方法對其訪問
2.繼承:提高代碼復用性;繼承是多態的前提
注:
①子類中所有的構造函數都會默認訪問父類中的空參數的構造函數,默認第一行有super();若無空參數構造函數,子類中需指定;另外,子類構造函數中可自己用this指定自身的其他構造函數。
3.多態
是父類或接口定義的引用變量可以指向子類或具體實現類的實例對象
好處:提高了程序的擴展性
弊端:當父類引用指向子類對象時,雖提高了擴展性,但只能訪問父類中具備的方法,不可訪問子類中的方法;即訪問的局限性。
前提:實現或繼承關系;覆寫父類方法。
面向對象的總結:
面向對象其實是現實世界模型的自然延伸。現實世界中任何實體都可以看作是對象。對象之間通過消息相互作用。另外,現實世界中任何實體都可歸屬於某類事物,任何對象都是某一類事物的實例。如果說傳統的面向過程式編程語言是以過程為中心以算法為驅動的話,面向對象的編程語言則是以對象為中心以消息為驅動。用公式表示,過程式編程語言為:程序=算法+數據;面向對象編程語言為:程序=對象+消息。
所有面向對象編程語言都支持三個概念:封裝、多態性和繼承,Java也不例外。現實世界中的對象均有屬性和行為,映射到計算機程序上,屬性則表示對象的數據,行為表示對象的方法(其作用是處理數據或同外界交互)。所謂封裝,就是用一個自主式框架把對象的數據和方法聯在一起形成一個整體。可以說,對象是支持封裝的手段,是封裝的基本單位。Java語言的封裝性較強,因為Java無全局變量,無主函數,在Java中絕大部分成員是對象,只有簡單的數字類型、字符類型和布爾類型除外。而對於這些類型,Java也提供了相應的對象類型以便與其他對象交互操作。
多態性就是多種表現形式,具體來說,可以用"一個對外接口,多個內在實現方法"表示。舉一個例子,計算機中的堆棧可以存儲各種格式的數據,包括整型,浮點或字符。不管存儲的是何種數據,堆棧的算法實現是一樣的。針對不同的數據類型,編程人員不必手工選擇,只需使用統一接口名,系統可自動選擇。運算符重載(operator overload)一直被認為是一種優秀的多態機制體現,但由於考慮到它會使程序變得難以理解,所以Java最后還是把它取消了。
繼承是指一個對象直接使用另一對象的屬性和方法。事實上,我們遇到的很多實體都有繼承的含義。例如,若把
看成一個實體,它可以分成多個子實體,如:卡車、公共汽車等。這些子實體都具有汽車的特性,因此,汽車是它們的"父親",而這些子實體則是汽車的"孩子"。Java提供給用戶一系列類(class),Java的類有層次結構,子類可以繼承父類的屬性和方法。與另外一些面向對象編程語言不同,Java只支持單一繼承。