概念繼承:子類引用超類便瑟,并且以關(guān)鍵字extends來表示
構(gòu)造器:對象在加載的一瞬間(new)執(zhí)行的那個程序塊,那個程序代碼就要構(gòu)造方法
構(gòu)造方法(構(gòu)造器)的特點:沒有返回值;沒有void;和類的名字相同
1.類建立好以后驰弄,虛擬機會給我們建立一個默認構(gòu)造器
2.構(gòu)造器不能被繼承(可以被調(diào)用)乾闰;
3.當(dāng)new一個子類對象的時候? 會先調(diào)用父類的構(gòu)造器再調(diào)用子類的構(gòu)造器;
4.在調(diào)用默認構(gòu)造器時可以使用? 【new? 方法名()疏日;】即可
*如果重載了構(gòu)造器偿洁,最好把默認的構(gòu)造器給彌補上? ,如果自己寫了一個帶有參數(shù)的構(gòu)造器沟优,那么這個構(gòu)造器就會把那個默認的沒有任何參數(shù)的構(gòu)造器給覆蓋了
如:A a = new A();
a----就是對象的句柄
重寫toString()方法:
public String toString(){
return "123";
}
在輸出時用a.toString()
5.構(gòu)造函數(shù)中經(jīng)常用的super
1)調(diào)用父類的方法
2)調(diào)用父類的屬性
3)調(diào)用父類的構(gòu)造方法
? ? ?1>.子類構(gòu)造的過程中一定會調(diào)用父類的構(gòu)造方法
? ? ?2>.super(多個參數(shù))調(diào)用父類的構(gòu)造方法
? ? ?3>.如果子類的構(gòu)造方法沒有顯示的調(diào)用父類的構(gòu)造方法 那默認調(diào)用父類無參數(shù)的構(gòu)造方法
? ? ?4>.如果子類的構(gòu)造方法沒有顯示的調(diào)用父類的構(gòu)造方法涕滋,父類無參數(shù)的構(gòu)造方法還沒有提供那么編譯就會出錯
重寫概念:發(fā)生在子類和超類之間,子類覆蓋父類的方法
1挠阁、屬性不能被覆蓋和重載
2.父類的引用指向子類的實例宾肺,子類如果覆蓋父類的方法。最后調(diào)用的是子類的方法
叫做虛方法侵俗;整個調(diào)用的過程就成為動態(tài)綁定的過程锨用;
3.覆蓋方法時,訪問的權(quán)限不能降低
4.重寫的規(guī)則:方法名坡慌,方法參數(shù)(個數(shù)黔酥,類型,順序)洪橘,返回值一樣
重載概念:要在同一個類中跪者,方法名一致,方法參數(shù)的個數(shù)不同或者參數(shù)的類型不同
抽象類 :abstract修飾的方法? 稱為抽象方法
1.抽象方法不能有方法體
2.如果一個類里邊有一個抽象方法那么這個類要聲明為抽象類
3.如果子類繼承自一個抽象類 那么就要實現(xiàn)這個抽象類里定義的所有抽象方法
或者把父類的抽象方法在子類中依舊聲明為抽象的方法 子類聲明為抽象類
4.抽象類里可以沒有抽象方法
5.抽象類不能實例化對象
接口 inferface修飾的方法稱為接口
Java是單繼承(只能繼承一個父類)熄求≡幔可以多實現(xiàn)(可以繼承多個接口)!5芡怼M堋!G涑恰枚钓!
1.接口里的方法都是抽象方法
void run();? 相當(dāng)于 public abstract void run()瑟押;
2.接口里的屬性都是靜態(tài)屬性
int id=100搀捷;? 相當(dāng)于? public static final int id=100;
3.如果一個類實現(xiàn)接口 就要實現(xiàn)接口里所有沒有實現(xiàn)的抽象方法,也可以把這個類聲明成abstrcat不實現(xiàn)其中的接口
實現(xiàn)使用的關(guān)鍵字: implements
4.接口不能實例化對象
5.接口 new實現(xiàn)類? 也是多態(tài)的表現(xiàn) 和父類的引用指向子類的實例是類似的
6.軟件開發(fā)過程中:接口的制定者 接口的實現(xiàn)者 接口的使用者? 三者分開
7.多個無關(guān)的類可以實現(xiàn)同一個接口
8.一個接口可以繼承其他接口 同時也就繼承了其他接口的方法
9一個類可以實現(xiàn)無關(guān)多個接口? 在某種程度上實現(xiàn)的多繼承
最后溫馨提示;慎用繼承
1嫩舟、父類變氢烘,子類就必須變。
2家厌、繼承破壞了封裝播玖,對于父類而言,它的實現(xiàn)細節(jié)對與子類來說都是透明的饭于。
3蜀踏、繼承是一種強耦合關(guān)系。