Java整理(二)物件導向,java整理物件導向

來源:互聯網
上載者:User

Java整理(二)物件導向,java整理物件導向
Java物件導向

靜態塊:用static申明,JVM載入類時執行,僅執行一次

構造塊:類中直接用{}定義,每一次建立對象時執行

執行順序優先順序:靜態塊>main()>構造塊>構造方法

 

所有的Java程式都以類class為組織單元

物件導向三大特徵:封裝、繼承、多態

封裝

防止該類的代碼和資料被外部類定義的代碼隨機訪問

成員變數一般設為private,使用setter和getter訪問

成員變數和局部變數區別使用this關鍵字,this關鍵字只能在方法內部使用。

繼承

向上轉型:通常基類在頂部,而匯出類在其下部散開,因此轉型為一個基類就是在繼承圖中向上移動,即向上轉型,更泛化的類型。

向下轉型:同上,向下轉為更具體的類型。

向上轉型是安全的,向下轉型幾乎是不安全的,需要進行運行時檢查,可以通過參數化型別機制解決,即泛型。

 

通過 extends 關鍵字可以聲明一個類是從另外一個類繼承而來的。

使用 implements 關鍵字可以變相的使java具有多繼承的特性,使用範圍為類繼承介面的情況,可以同時繼承多個介面(介面跟介面之間採用逗號分隔)。

class 子類 extends 父類 {}

所有的類都是繼承於java.lang.Object

super關鍵字:實現對父類成員的訪問,用來引用當前對象的父類。

this關鍵字:指向自己的引用。

final 關鍵字聲明類可以把類定義為不能繼承的

 

子類不能繼承父類的構造器(構造方法或者建構函式),但是父類的構造器帶有參數的,則必須在子類的構造器中顯式地通過super關鍵字調用父類的構造器並配以適當的參數列表。

如果父類有無參構造器,則在子類的構造器中用super調用父類構造器不是必須的,如果沒有使用super關鍵字,系統會自動調用父類的無參構造器。

類如果不含公有或受保護的構造器無法被繼承。

 

多態

多態是同一個行為具有多個不同表現形式或形態的能力。

多態存在的三個必要條件:繼承、重寫、父類引用指向子類對象

多態的實現方式:重寫、介面、抽象類別和抽象方法

重寫與重載

重寫(Override)是子類對父類的允許訪問的方法的實現過程進行重新編寫, 傳回值和形參都不能改變。即外殼不變,核心重寫!

傳回型別、方法名、參數類型及個數都要與父類相同

重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常。例如:父類的一個方法申明了一個檢查異常 IOException,但是在重寫這個方法的時候不能拋出 Exception 異常,因為 Exception 是 IOException 的父類,只能拋出 IOException 的子類異常。

存取權限不能比父類中被重寫的方法的存取權限更低。

當需要在子類中調用父類的被重寫方法時,要使用super關鍵字。

重載(Overloading) 是在一個類裡面,方法名字相同,而參數不同。傳回型別可以相同也可以不同。

每個重載的方法(或者建構函式)都必須有一個獨一無二的參數類型列表。

最常用的地方就是構造器的重載。

 

方法的重寫(Overriding)和重載(Overloading)是java多態性的不同表現,重寫是父類與子類之間多態性的一種表現,重載可以理解成多態的具體表現形式。

抽象類別

使用abstract修飾

抽象類別除了不能執行個體化對象之外,類的其它功能依然存在,成員變數、成員方法和構造方法的訪問方式和普通類一樣。

由於抽象類別不能執行個體化對象,所以抽象類別必須被繼承,才能被使用。

abstract關鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個方法名,而沒有方法體。抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括弧。

如果一個類包含抽象方法,那麼該類必須是抽象類別。

任何子類必須重寫父類的抽象方法,或者聲明自身為抽象類別。

構造方法,類方法(用static修飾的方法)不能聲明為抽象方法。

介面

interface 介面名[extends 父介面1,父介面2,…]//可多繼承

{0~多個常量定義//變數隱式為public staticfinal

 0~多個抽象方法定義…//只能用public abstract修飾

}

class 類名 extends 父類 imlements 介面1,介面2,…{…}

介面沒有構造方法

介面支援多繼承

介面不能包含成員變數,除了static final 變數

介面類型可用來聲明一個變數,他們可以成為一個null 指標,或是被綁定在一個以此介面實現的對象。

標記介面

最常用的繼承介面是沒有包含任何方法的介面。

標識介面是沒有任何方法和屬性的介面.它僅僅表明它的類屬於一個特定的類型,供其他代碼來測試允許做一些事情。

標識介面作用:簡單形象的說就是給某個對象打個標(蓋個戳),使對象擁有某個或某些特權。

抽象類別和介面的區別

1. 抽象類別中的方法可以有方法體,就是能實現方法的具體功能,但是介面中的方法不行。

2. 抽象類別中的成員變數可以是各種類型的,而介面中的成員變數只能是 public static final 類型的。

3. 介面中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類別是可以有靜態代碼塊和靜態方法。

4. 一個類只能繼承一個抽象類別,而一個類卻可以實現多個介面。

java 1.8開始支援介面中定義靜態方法、可以有default方法。


C++

Java

虛函數(可被基類引用)

普通函數

純虛函數

抽象函數

抽象類別

抽象類別

虛基類

介面

 

包packet

Java 使用包(package)這種機制是為了防止命名衝突,存取控制,提供搜尋和定位類(class)、介面、枚舉(enumerations)和注釋(annotation)等。

package pkg1[.pkg2[.pkg3…]];                     //建立

import package1[.package2…].(classname|*);     //使用

系統中的包

       java.(功能).類

       java.lang.(類)     包含java語言基礎類

       java.util.(類)        包含java中各種工具類

       java.io.(類)          包含輸入、輸出相關功能類

構造與銷毀

l  無參構造器為預設構造器,定義構造器系統將不會自動建立預設構造器。

l  可以用this調用一個構造器(不能調用兩個,類似於super調用父類構造器),必須將調用置於最起始位置。

l  finalize()方法,虛擬機器釋放對象空間前自動調用該方法,不能直接調用,不等於解構函式,記憶體回收只與記憶體有關,盡量不使用finalize方法。

l  靜態塊:用static聲明,JVM載入類時執行,僅執行一次

構造塊:類中直接用{}定義,每一次建立對象時執行

執行順序優先順序:靜態塊>main()>構造塊>構造方法

父類靜態成員和靜態塊、子類靜態成員和靜態塊、父類構造方法、子類構造方法

 

查看評論

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.