更新時間:2019-12-25 10:41:44 來源:動力節點 瀏覽3174次
面向對象的基本概念
對象和類的概念
對象:是把數據和數據操作方法放在一起,作為一個相互依存的整體,即對象
類:對同類對象抽象出其共性,即類,類中的大多數方法只能被本類的方法進行處理,類通過一個簡單的外部接口與外界發生聯系,對象與對象之間通過消息進行通信
所以我們是在面向對象進行編程,面向一個抽象的實體進行編程。
面向對象和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
面向對象的優點
1,較高的開發效率
2,較高的擴展性和代碼可重用性
3,保證軟件的高可維護性
面向對象的特征
抽象
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。
繼承:
繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
封裝
封裝是客觀事物抽象成類,每個類對自身的數據和方法進行保護,類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
多態性
多態性是指允許不同類的對象對同一消息作出響應。比如同樣的加法,把兩個時間加在一起和把兩個整數加在一起肯定完全不同。又比如,同樣的選擇編輯-粘貼操作,在字處理程序和繪圖程序中有不同的效果。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
面向對象的六大原則
單一職責原則(迪米特法則)(Single-Resposibility Principle):一個類,最好只做一件事,只有一個引起它的變化。單一職責原則可以看做是低耦合、高內聚在面向對象原則上的引申,將職責定義為引起變化的原因,以提高內聚性來減少引起變化的原因。
開放封閉原則(Open-Closed principle):軟件實體應該是可擴展的,而不可修改的。也就是,對擴展開放,對修改封閉的。
Liskov替換原則(Liskov-Substituion Principle):子類必須能夠替換其基類。這一思想體現為對繼承機制的約束規范,只有子類能夠替換基類時,才能保證系統在運行期內識別子類,這是保證繼承復用的基礎。
依賴倒置原則(Dependecy-Inversion Principle):依賴于抽象。具體而言就是高層模塊不依賴于底層模塊,二者都同依賴于抽象;抽象不依賴于具體,具體依賴于抽象。
接口隔離原則(Interface-Segregation Principle):使用多個小的專門的接口,而不要使用一個大的總接口
合成復用原則(Composite Reuse Principle)是盡量使用合成/聚合的方式,而不是使用繼承。
抽象類和接口
這兩種方式實現了以上面向對象特性里的繼承和抽象
抽象類
抽象類的特性如下
抽象類中可以構造方法
抽象類中可以存在普通屬性,方法,靜態屬性和方法。
抽象類中可以存在抽象方法。
如果一個類中有一個抽象方法,那么當前類一定是抽象類;抽象類中不一定有抽象方法。
抽象類中的抽象方法,需要有子類實現,如果子類不實現,則子類也需要定義為抽象的。
抽象類不能被實例化,抽象類和抽象方法必須被abstract修飾(其實這就是抽象類和普通類的區別,其它和普通類都差不多)
java1.8實測,抽象類中的抽象方法和非抽象方法在不加修飾符的情況下,都是默認的default
接口
接口的一些使用特性
在接口中只有方法的聲明,沒有方法體。
接口體只能用 public 和 abstract 修飾。only public & abstract are permitted 。
在接口中只有常量,因為定義的變量,在編譯的時候都會默認加上public static final
在接口中的方法,永遠都被public來修飾,不加修飾符,默認也是public。 。
接口中沒有構造方法,也不能實例化接口的對象。(所以接口不能繼承類)
接口可以實現多繼承,接口可以繼承接口,用extends
接口中定義的方法都需要有實現類來實現,如果實現類不能實現接口中的所有方法則實現類定義為抽象類。
注意:接口是一種特殊的抽象類
抽象類與接口的異同
相同點
1,相同點是接口和抽象類都不能實例化
2,接口的實現類或抽象類的子類實現了接口或抽象類中的方法后才能實例化。
不同點
1,首先類可以實現多個接口,但只能繼承一個抽象類(從繼承角度)
2,接口體只能用 public 和 abstract 修飾,而抽象類的類訪問修飾符除了(和abstract不搭的關鍵字列表系列)final,abstract,private,static,synchorized,native之外基本都可以(從類的修飾符角度)
3,抽象類可以有普通的成員變量,靜態變量。而接口的變量默認為public static final,只能有靜態的不可修改的變量,而且必須賦初值(從變量角度)
4,接口里的方法只能用public修飾,而抽象類的方法可以用除了(和abstract不搭的關鍵字列表系列)final,abstract,private,static,synchorized,native的方法修飾符。并且接口只有未實現方法,但抽象類可以有普通方法(從方法角度)
5,接口不能由構造函數,抽象類可以有構造函數。(從構造函數角度)
重寫和重載
多態有兩種實現方式,重載(編譯期多態)和重寫(運行期多態)
重載(靜態多分派)
1、在同一個類中 。 2、方法名相同。3、方法的形參列表不同,具體的不同表現為: 類型、個數、順序的不同才可以構成重載。4、與方法的返回值類型與訪問權限或是拋出異常無關
注意:java中可以有多個重載的main方法,只有public static void main(String[] args){}是函數入口
重寫(動態單分派)
重寫是子類實現父類的方法
在子類中可以根據需要對從基類中繼承來的方法進行重寫。
重寫的方法和被重寫的方法必須具有相同方法名稱、參數列表和返回類型。
重寫方法不能使用比被重寫的方法更嚴格的訪問權限。
子類方法拋出的異常必須和父類方法拋出的異常相同,或者是父類方法拋出的異常類的子類。
父類的靜態方法是不能被子類覆蓋為非靜態方法。父類的非靜態方法不能被子類覆蓋為靜態方法。
子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法。區別:運行時,JVM把靜態方法和所屬的類綁定,而把實例方法和所屬的實例綁定。子類定義與父類同名的靜態方法但不是覆蓋父類的方法
Justfuck j = new B(); //j是父類引用,B()是子類對象,A()是靜態方法。j.A();最后打印出的還是base,即父類的輸出結果
父類的私有方法不能被覆蓋
父類的非抽象方法可以被覆蓋為抽象方法
子類可以重寫父類的同步方法。如果父類中的某個方法使用了 synchronized關鍵字,而子類中也覆蓋了這個方法,默認情況下子類中的這個方法并不是同步的,必須顯示的在子類的這個方法中加上 synchronized關鍵字才可。當然,也可以在子類中調用父類中相應的方法,這樣雖然子類中的方法并不是同步的,但子類調用了父類中的同步方法,也就相當子類方法也同步了
總的來說:方法的重寫(override)三同一小一大原則:
方法名相同,參數類型相同,參數列表相同
子類拋出異常小于等于父類方法拋出異常,
子類訪問權限大于等于父類方法訪問權限。
重載和重寫的區別
重載是同一個類中方法之間的關系,重寫是子類和父類之間的關系
重寫只能由一個方法或只能由一對方法產生關系,重載可以是多個方法之間的關系
重寫要求參數列表相同,重載要求不同,重寫要求返回值相同,重載不要求
以上就是動力節點Java培訓機構小編介紹的“Java面試:面向對象Java技術”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
相關推薦
最新最全java面試題及答案(初級到高級)
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習