java
抽象類:被abstract所修飾的類。數組
spa
【權限修飾符】 abstract class 類名{
}
【權限修飾符】 abstract class 類名 extends 父類{
}設計
code
對象
繼承
接口
理解:假設建立了抽象類的對象,調用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。it
抽象類中,也有構造方法,是供子類建立對象時,初始化父類成員變量使用的。io
理解:子類的構造方法中,有默認的super()或手動的super(實參列表),須要訪問父類構造方法。
抽象類中,不必定包含抽象方法,可是有抽象方法的類一定是抽象類。
理解:未包含抽象方法的抽象類,目的就是不想讓調用者建立該類對象,一般用於某些特殊的類結構設計。
抽象類的子類,必須重寫抽象父類中全部的抽象方法,不然,編譯沒法經過而報錯。除非該子類也是抽象類。
理解:假設不重寫全部抽象方法,則子類中可能包含抽象方法。那麼建立對象後,調用抽象的方法,沒有意義。
繼承父類或者實現接口【二選一】
方法的重寫【意義體現:不重寫,無心義】
final方法 3)private方法 4)屬性;//這些不能重寫的就不可能有多態(即靜態綁定)。只有能重寫的方法纔有多態(即動態綁定)。
父類引用指向子類對象【格式體現】
多態體現的格式:
父類類型 變量名 = 子類對象;
變量名.方法名();//這個方法是父類中聲明,子類中重寫的方法
父類類型:指子類對象繼承的父類類型,或者實現的父接口類型。
多態體現出來的現象:
編譯時,看「父類」,只能調用父類聲明的方法,不能調用子類擴展的方法;
運行時,看「子類」,必定是執行子類重寫的方法體;
形參是父類的類型,傳入的實參是子類的對象
元素的類型是父類的類型,存進去的元素對象是子類的對象
向上轉型:多態自己是子類類型向父類類型向上轉換的過程,這個過程是默認的。
向下轉型
變量名/對象 instanceof 數據類型
若是變量/對象屬於該數據類型,返回true。
若是變量/對象不屬於該數據類型,返回false。
成員變量
靜態方法
私有方法
final方法
動態綁定:運行期間才肯定訪問哪一個類的
可能被子類重寫的非靜態方法(也稱爲虛方法)
用法:
外部類 | 成員變量 | 代碼塊 | 構造器 | 方法 | 局部變量 | |
---|---|---|---|---|---|---|
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)修飾內部類:能夠一塊兒修飾成員內部類,不能一塊兒修飾局部內部類
類 java.lang.Object
是類層次結構的根類,即全部類的父類。每一個類都使用 Object
做爲超類。
Object類型的變量與除Object之外的任意引用數據類型的對象都多態引用
全部對象(包括數組)都實現這個類的方法。
關於Object類的API另見Java類/接口的API