1 多態的成員使用
1.1 特點:
- 成員變量:使用的是父類的
- 成員方法:由於存在重寫現象所以使用的是子類的
- 靜態成員:隨着對象而存在,誰調用的就返回誰的
public class Test1_UseManyTai {
public static void main(String[] args) {
// 創建多態對象測試
Fu f = new Zi();// 口訣1 :父類引用 指向 子類對象
System.out.println(f.count); //1、成員變量用父類的!!!口訣2: 編譯看左邊,運行看右邊(針對重寫現象)。
f.eat(); // 口訣2: 編譯看左邊,運行看右邊(針對重寫現象)。
//2、 編譯看左邊,eat()調用的是父類的方法聲明,但是方法體使用的是子類的。
// 編譯看左邊更好的體現了多態可以用來 統一調用標準,就是都向 父類 看齊,必須使用父類提供了的功能。
//3、靜態方法能重寫嗎???---靜態資源不能重寫
f.sleep();//使用的仍然是父類的功能
}
}
// 創建父類
class Fu {
int count = 10;
public void eat() {
System.out.println("Fu..eat()...");
}
// 靜態方法
static public void sleep() {
System.out.println("Fu..sleep()...");
}
}
// 創建子類
class Zi extends Fu {
int count = 20;
public void eat() {
System.out.println("Zi..eat()...");
}
// 靜態方法 -- 真的是重寫現象嗎---不存在!!
static public void sleep() {
System.out.println("Zi..sleep()...");
}
}
2 權限修飾符
- 用來控制一個類,或者類中的成員的訪問範圍。
3 異常
3.1 概述:
- 用來封裝錯誤信息的對象。
- 組成結構:類型,提示,行號。
3.2 異常的繼承結構:
- Throwable - 頂級父類
- – Error:系統錯誤,無法修復
- – Exception:可修復的錯誤
- –RunTimeException
- –ClassCastException
- –ClassNotFoundException
3.3 異常處理:
- 程序中遇到了異常,通常有兩種處理方式:捕獲 或者 向上拋出
- 當調用了一個拋出異常的方法時,調用位置可以不做處理繼續向上拋出也可以捕獲異常。
4 抽象類
4.1 概念:
- Java中可以定義沒有方法體的方法,該方法由其子類來具體的實現。
- 該沒有方法體的方法我們稱之爲抽象方法,含有抽象方法的類我們稱之爲抽象類。
- 抽象類可以理解爲是一個只有方法聲明沒有方法體的特殊類。
//把共性的代碼,向上提取,形成父類 -- 形成繼承的結構好處是可以複用父類的代碼
//抽象類是個特殊的類,特殊在哪兒?特殊在類裏可以有普通方法,還可以有抽象方法。
抽象的 class Animal{
//父類的方法體讓子類重寫了!!!--這時父類的方法體有點多餘!!!父類乾脆就不提供方法體--抽象方法
抽象的 public void eat() ;
public void sleep(){
syso(....);
}
}
class Dog extends Animal{
public void eat(){//重寫目的是修改父類原有的功能
syso(.);
}
}
4.2 特點:
- 通過java關鍵字abstract實現
- 可以修飾方法或者類
- 抽象類中可以沒有抽象方法(由子類去實現) ?
- 如果類中有抽象方法,那該類必須定義爲一個抽象類
- 子類繼承了抽象類以後,要麼還是一個抽象類,要麼就把所有抽象方法都重寫
- 多用於多態中
- 抽象類不可以被實例化new
5 抽象類的用法
public class Test4_UseAbstract {
public static void main(String[] args) {
//創建多態對象測試
Father f = new Son();
//Father f2 = new Father();
}
}
//創建父類
abstract class Father{
//1、抽象類能創建對象嗎?--不能 !!
//2、那麼抽象類裏的構造方法有啥用??---方便子類創建對象!!
public Father() {
System.out.println("Father()...");
}
}
//創建子類
class Son extends Father{
public Son() {
super();//默認就存在
System.out.println("Son()...");
}
}