一瓮下、繼承
主要為了解決代碼重復,提高代碼維護性钝域。
繼承的特性:
子類擁有父類非private的屬性讽坏,方法。
子類可以擁有自己的屬性和方法例证,即子類可以對父類進行擴展路呜。
子類可以用自己的方式實現父類的方法。
Java的繼承是單繼承,但是可以多重繼承胀葱,單繼承就是一個子類只能繼承一個父類漠秋,多重繼承就是,例如A類繼承B類抵屿,B類繼承C類庆锦,所以按照關系就是C類是B類的父類,B類是A類的父類晌该,這是java繼承區(qū)別于C++繼承的一個特性肥荔。
提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系)朝群。
使用 implements 關鍵字可以變相的使java具有多繼承的特性燕耿,使用范圍為類繼承接口的情況,可以同時繼承多個接口(接口跟接口之間采用逗號分隔)姜胖。
super關鍵字:我們可以通過super關鍵字來實現對父類成員的訪問誉帅,用來引用當前對象的父類。
this關鍵字:指向自己的引用右莱。
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void eatTest() {
this.eat(); // this 調用自己的方法
super.eat(); // super 調用父類方法
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eat();//因為實例化了dog對象蚜锨,所以會調用dog類里的方法
}
}
final 關鍵字聲明類可以把類定義為不能繼承的,即最終類慢蜓;或者用于修飾方法亚再,該方法不能被子類重寫
構造器:
子類不能繼承父類的構造器(構造方法或者構造函數),但是父類的構造器帶有參數的晨抡,則必須在子類的構造器中顯式地通過super關鍵字調用父類的構造器并配以適當的參數列表氛悬。
如果父類有無參構造器,則在子類的構造器中用super調用父類構造器不是必須的耘柱,如果沒有使用super關鍵字如捅,系統(tǒng)會自動調用父類的無參構造器。
如果圖中的SubClass(){
super(300);
System.out.println("SubClass");
} 如果沒有用super(300);也將默認調用父類無參數構造函數调煎,
如果父類只有帶參數的構造方法镜遣,則子類一定要通過super關鍵字調用父類的構造器并配以適當的參數列表(其構造函數也要帶參數如public SubClass(int n){super(300)})
二、重寫
方法的重寫規(guī)則:
參數列表必須完全與被重寫方法的相同士袄;
返回類型必須完全與被重寫方法的返回類型相同悲关;
訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類的一個方法被聲明為public娄柳,那么在子類中重寫該方法就不能聲明為protected坚洽。
父類的成員方法只能被它的子類重寫。
聲明為final的方法不能被重寫西土。
聲明為static的方法不能被重寫讶舰,但是能夠被再次聲明。
子類和父類在同一個包中,那么子類可以重寫父類所有方法跳昼,除了聲明為private和final的方法般甲。
子類和父類不在同一個包中,那么子類只能夠重寫父類的聲明為public和protected的非final方法鹅颊。
重寫的方法能夠拋出任何非強制異常敷存,無論被重寫的方法是否拋出異常。但是堪伍,重寫的方法不能拋出新的強制性異常锚烦,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以帝雇。
構造方法不能被重寫涮俄。
如果不能繼承一個方法,則不能重寫這個方法尸闸。
當需要在子類中調用父類的被重寫方法時彻亲,要使用super關鍵字。
三吮廉、重載
重載規(guī)則:
被重載的方法必須改變參數列表(參數個數或類型或順序不一樣)苞尝;
被重載的方法可以改變返回類型;
被重載的方法可以改變訪問修飾符宦芦;
被重載的方法可以聲明新的或更廣的檢查異常宙址;
方法能夠在同一個類中或者在一個子類中被重載。
無法以返回值類型作為重載函數的區(qū)分標準调卑。
四抡砂、多態(tài)
多態(tài)存在的三個必要條件:
繼承
重寫
父類引用指向子類對象
多態(tài)的實現方式:
方式一:重寫:
方式二:接口
- 生活中的接口最具代表性的就是插座,例如一個三接頭的插頭都能接在三孔插座中令野,因為這個是每個國家都有各自規(guī)定的接口規(guī)則舀患,有可能到國外就不行徽级,那是因為國外自己定義的接口類型气破。
- java中的接口類似于生活中的接口,就是一些方法特征的集合餐抢,但沒有方法的實現
方式三:抽象類和抽象方法
五现使、抽象類
抽象類不能實例化對象,所以抽象類必須被繼承旷痕,才能被使用碳锈。
抽象方法
Abstract關鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個方法名欺抗,而沒有方法體售碳。
抽象方法沒有定義,方法名后面直接跟一個分號,而不是花括號贸人。
如果一個類包含抽象方法间景,那么該類必須是抽象類。
任何子類必須重寫父類的抽象方法艺智,或者聲明自身為抽象類倘要。
六、接口
接口與類的區(qū)別:
接口不能用于實例化對象十拣。
接口沒有構造方法封拧。
接口中所有的方法必須是抽象方法。
接口不能包含成員變量夭问,除了 static 和 final 變量泽西。
接口不是被類繼承了,而是要被類實現甲喝。
接口支持多繼承尝苇。
接口特性
接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會報錯)埠胖。
接口中可以含有變量糠溜,但是接口中的變量會被隱式的指定為 public static final 變量(并且只能是 public,用 private 修飾會報編譯錯誤)直撤。
接口中的方法是不能在接口中實現的非竿,只能由實現接口的類來實現接口中的方法。
一個接口能繼承另一個接口