簡述Java中的面向對象(OOP)思想
Java是一種面向對象的語言,那么什么是面向對象(Object Oriented Programming)?
首先,什么是對象(Object)?Java中有一種思想叫做“萬物皆對象”,對象就是具有某些特殊屬性(成員變量)和行為方式(方法)的實體。現實生活中的任何事物都可以看作是對象,無論是具體或抽象的事物,比如:一個動物或者是城市的變化。具有兩個特征:屬性(Property)和行為(Behavior)。
其次,什么是面向對象?
我們先了解什么是面向過程。面向過程是以函數為基礎,完成各種操作,強調過程;面向過程的編程語言,強調的是功能行為,注重過程的一步步實現。而面向對象是已對象為基礎,完成各種操作主要強調對象、結果。面向對象的編程語言有Java、c++、c#等。面向對象的編程語言,是將功能封裝進對象,強調具備某些功能的對象,其實面向對象的語言是基於面向過程的,因為即使是調用某個對象,被調用的對象的方法也是通過面向過程的方式編寫的。但面向對象的編程思想更加符合人們的日常思維,將復雜的問題分解為不同領域的簡單問題,更便於邏輯分析與分工合作。
最后,面向對象有什么特征?
在面向對象的程序設計中,對象與消息傳遞分別表現事物及事物之間的相互關系,通過封裝(Encapsulation)將對象的定義和對象的實現分開,通過繼承(Inheritance)體現類與類之間的相互關系,以及由此帶來的實體的多態(Polymorphism)性,構成了面向對象的基本特征。
封裝指的是隱藏對象的屬性以及實現細節,僅對外提供訪問的方法。面向對象的程序設計是將數據成員(Data Member)和屬於此數據的操作方法(Method)放在同一實體或對象中,就是封裝。封裝是為了達到模塊化和信息隱藏的目的。
封裝有自身的優點:將變化隔離,其他對象在使用該對象的時候可以任意修改可訪問的信息,但不會影響其他依賴於此對象的對象,提高了安全性; 同時,一個對象被對立的編寫及維護而不影響其他對象,而且該對象可以被來回調用傳遞,提高了重用性。
當然,它也有自己不可避免的缺點,對象被封裝后,變量及方法的訪問難度提升,增加了訪問步驟。
繼承指的是多個類具有共同的屬性(成員變量)與行為(成員方法)的時候,將這些共同的部分向上抽取出來定義到一個公共的類中,這時其他類與這個公共的類形成了繼承關系,從而在多個類中不需要重復定義公共部分。這個公共的類稱為:父類、超類、基類;其他的幾個類稱為:子類、派生類。
繼承有自身的優點:可以實現代碼的復用,利用已存在的父類程序代碼,編寫子類時只需要寫子類特有的屬性與行為。它也有自身的缺點:父類發生變化時,會造成子類也發生變化,造成“強耦合”關系,這是寫程序時需要盡量避免的。Java在定義類時,只允許單繼承,不允許多重繼承,但可以多層繼承,多實現。
多態指的是Java程序在編譯與執行時表現出來的不同狀態,是繼承關系在執行過程中的獨特現象。多態針對的是引用數據類型。形成多態的條件首先要有子父類的繼承關系(extends),或類與接口的實現關系(implements);其次,子類要重寫父類的方法;最后,在調用時,父類的“引用變量”指向子類的對象。接口是指當一個類中的方法都是抽象的時候,這時候可以將該抽象類用另一種形式定義和表示,就是接口(interface)。而接口不可以實例化,只能有實現了該接口的子類並覆蓋了接口中所有的抽象方法后,該子類才可以實例化。否則,這個子類就是一個抽象類。抽象類是指含有用abstract關鍵字所修飾的抽象方法的類,並且這個類也要用abstract關鍵字修飾。一個類繼承抽象類后,必須重寫其抽象方法,不同的子類可以有不同的實現。