Java---OOP之多態

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()...");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章