Java基礎語法07-面向對象-多態

抽象類

  • 抽象方法 : 沒有方法體的方法。java

  • 抽象類:被abstract所修飾的類。數組

抽象類的語法格式:spa

【權限修飾符】 abstract class 類名{

}
【權限修飾符】 abstract class 類名 extends 父類{

}設計

抽象方法的語法格式:code

【其餘修飾符】 abstract 返回值類型  方法名(【形參列表】);對象

子類對父類抽象方法的完成實現,咱們將這種方法重寫的操做,也叫作實現方法繼承

注意事項

  1. 抽象類不能建立對象,若是建立,編譯沒法經過而報錯。只能建立其非抽象子類的對象。接口

    理解:假設建立了抽象類的對象,調用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。it

  2. 抽象類中,也有構造方法,是供子類建立對象時,初始化父類成員變量使用的。io

    理解:子類的構造方法中,有默認的super()或手動的super(實參列表),須要訪問父類構造方法。

  3. 抽象類中,不必定包含抽象方法,可是有抽象方法的類一定是抽象類。

    理解:未包含抽象方法的抽象類,目的就是不想讓調用者建立該類對象,一般用於某些特殊的類結構設計。

  4. 抽象類的子類,必須重寫抽象父類中全部的抽象方法,不然,編譯沒法經過而報錯。除非該子類也是抽象類。

    理解:假設不重寫全部抽象方法,則子類中可能包含抽象方法。那麼建立對象後,調用抽象的方法,沒有意義。

多態

多態: 是指同一個類別的事物的同一行爲,在不一樣的子類別中具備多個不一樣表現形式。

從語法角度來講,多態就是在運行期間才能肯定調用哪一個類的方法,即執行子類重寫的方法。

前提【重點】

  1. 繼承父類或者實現接口【二選一】

  2. 方法的重寫【意義體現:不重寫,無心義】

    • 1)靜態方法 2)final方法 3)private方法 4)屬性;//這些不能重寫的就不可能有多態(即靜態綁定)。只有能重寫的方法纔有多態(即動態綁定)。

  3. 父類引用指向子類對象【格式體現】

多態體現的格式:

父類類型 變量名 = 子類對象;
變量名.方法名();//這個方法是父類中聲明,子類中重寫的方法

父類類型:指子類對象繼承的父類類型,或者實現的父接口類型。

多態體現出來的現象:

  • 編譯時,看「父類」,只能調用父類聲明的方法,不能調用子類擴展的方法;

  • 運行時,看「子類」,必定是執行子類重寫的方法體;

多態的應用

一、多態參數

形參是父類的類型,傳入的實參是子類的對象

二、多態數組

元素的類型是父類的類型,存進去的元素對象是子類的對象

向上轉型

  • 向上轉型:多態自己是子類類型向父類類型向上轉換的過程,這個過程是默認的。

父類類型  變量名 = new 子類類型();

向下轉型

  • 向下轉型:父類類型向子類類型向下轉換的過程,這個過程是強制的。

子類類型 變量名 = (子類類型) 父類變量名;

向下轉型有風險,可能會發生ClassCastException異常,若是想要避免這個異常,最好在向下轉型以前,用instanceof進行判斷。

變量名/對象 instanceof 數據類型

若是變量/對象屬於該數據類型,返回true。
若是變量/對象不屬於該數據類型,返回false。

虛方法動態綁定

  • 靜態綁定:編譯期間就肯定訪問哪一個類的

    • 成員變量

    • 靜態方法

    • 私有方法

    • final方法

  • 動態綁定:運行期間才肯定訪問哪一個類的

    • 可能被子類重寫的非靜態方法(也稱爲虛方法)

native關鍵字

用法:只能修飾方法

表示這個方法的方法體代碼不是用Java語言實現的,可是能夠當作Java的方法同樣去正常調用它,或者子類重寫它。

修飾符一塊兒使用問題

外部類 成員變量 代碼塊 構造器 方法 局部變量
public × ×
protected × × ×
private × × ×
static × × ×
final × ×
abstract × × × ×
native × × × × ×

 

不能和abstract一塊兒使用的修飾符?

(1)abstract和final不能一塊兒修飾方法和類

(2)abstract和static不能一塊兒修飾方法

(3)abstract和native不能一塊兒修飾方法

(4)abstract和private不能一塊兒修飾方法

 

static和final一塊兒使用:

(1)修飾方法:能夠,由於都不能被重寫

(2)修飾成員變量:能夠,表示靜態常量

(3)修飾局部變量:不能夠,static不能修飾局部變量

(4)修飾代碼塊:不能夠,final不能修改代碼塊

(5)修飾內部類:能夠一塊兒修飾成員內部類,不能一塊兒修飾局部內部類

Object根父類

java.lang.Object是類層次結構的根類,即全部類的父類。每一個類都使用 Object 做爲超類。

  • Object類型的變量與除Object之外的任意引用數據類型的對象都多態引用

  • 全部對象(包括數組)都實現這個類的方法。

  • 若是一個類沒有特別指定父類,那麼默認則繼承自Object類。

 關於Object類的API另見Java類/接口的API

相關文章
相關標籤/搜索