Java 是單繼承的,Java中的類不支持多繼承,但是支持多層繼承。
Object類是所有類的父類。
Java不支持多類繼承:
Java支持多層繼承:
反證法:
Object類:
Object類是java所有類的祖宗類,我們寫的任意一個類,其實都是Object類的子類或子孫類。
A是Object的子類。
B類繼承了A類,B跟Object類的子孫類。B跟Object類也是脫不了關系的。
Object類是任何類的祖宗類。我們創建的任何類都是直接或者間接Object類。
那么,我們可以調Object類里的方法的。
方法重寫:
當子類覺得父類中的某個方法不好用,或者無法滿足自己的需求的時候,子類可以重寫一個方法名稱、參數列表一樣的方法,去覆蓋父類的這個方法,這個就稱為方法重寫。
注意:
重寫后,方法的方法,Java會遵循就近原則。
A類:
package cn.ensource.d12_extends_override;public class A {public void print1() {System.out.println("1111");}public void print2(int a, int b) {System.out.println("2222");}
}
B類:
package cn.ensource.d12_extends_override;public class B extends A{// 方法重寫public void print1() {System.out.println("6666");}public void print2(int a, int b) {System.out.println("9999");}
}
Test類:
package cn.ensource.d12_extends_override;public class Test {public static void main(String[] args) {// 目標:認識方法重寫,掌握方法重寫的應用場景B b = new B();b.print1();b.print2(1, 2);}
}
1)
?加注解更安全,可讀性也比較好,明了知道這是一個Override,方法重寫。
2)修飾符要大于等于,如果小于就報錯。
3)返回值類型必須一樣,或者范圍更小。
4)私有方法和靜態方法不能被重寫。
我們實際開發中都是:申明不變、重新實現。
方法重寫在開發中的常見應用場景:
子類重寫Object類的toString方法,以便返回對象的內容。
Student類會繼承Object類的toString方法的。
?小細節:我們打印對象的時候,默認是調用toString方法的。
在Student類中重寫toString方法。
返回結果是:
返回結果就是Student 對象的內容了。有個就近原則。
我們再看這個:
?運行結果:
說明:ArrayList類中把toString類進行了重寫。
我們學著去查找是怎么重寫的,我們看到ArrayList是繼承了AbstractList(抽象類),父類又去集成AbstractCollection類,在這個抽象集合類中有重寫toString方法。
這段代碼的意思還是好懂的,Iterator是一個迭代器。
StringBuilder:字符串構造器
小技巧:
自動生成:
方法重寫的概念:
子類寫了一個方法名稱,形參列表與父類某個方法一樣的方法,去覆蓋父類的該方法。
申明不變,重新實現。