什麼是重寫?
重寫,也叫做覆蓋,當父類中的方法無法滿足子類需求時,子類可以將父類的方法進行重寫編寫來滿足需求。比如孩子繼承了父親的房子,可以將房子重新裝修。
方法重寫的條件:
1 兩個類必須是繼承關係
2 必須具有相同的方法名,相同的返回值類型,相同的參數列表.
3 重寫的方法不能比被重寫的方法擁有更低的訪問權限。
4 重寫的方法不能比被重寫的方法拋出更寬泛的異常。(關於異常後面的章節再講。)
5 私有的方法不能被重寫。
6 構造方法無法被重寫,因爲構造方法無法被繼承。
7 靜態的方法不存在重寫。
8 重寫指的是成員方法,和成員變量無關。
先定義一個動物類
class Animal {
public void eat() {
System.out.println("吃飯");
}
public void sleep() {
System.out.println("睡覺");
}
}
定義一個Cat類繼承Animal
class Cat extends Animal {
public void eat() {
System.out.println("吃貓糧");//貓喜歡吃貓糧
}
}
定義一個Dog類繼承Animal
class Dog extends Animal {
public void eat() {
System.out.println("吃狗糧");//狗喜歡吃狗糧
}
}
Animal測試類
public class AnimalTest01 {
public static void main(String[] args) {
Cat c = new Cat();
c.eat();
Dog d = new Dog();
d.eat();
}
}
上代碼中的Cat類和Dog類在調用父類Animal中的eat方法時已經不能很好的滿足自身的需求了,所以都將eat類進行了重寫。
靜態的方法不存在重寫
public class Test01{
public static void main(String[] args){
A.m1();
B.m1();
}
}
class A{
//靜態方法
public static void m1(){
System.out.println("A中靜態方法m1");
}
}
class B extends A{
//嘗試重寫父類的靜態方法
public static void m1(){
System.out.println("B中靜態方法m1");
}
}