七,繼承和多態

1,繼承

    次級類會繼承上級類的方法,也就是說子類自動獲得父類的功能。  子類中可以選擇覆蓋父類的方法以適應相應需求

    實例變量無法被覆蓋掉是因爲不需要, 它們並沒有被定義成特殊的行爲

繼承的實例
public class Doctor{
   boolean worksAtHospital;
   void treatPatient(){}
}

public class FamilyDoctor extends Doctor{
   boolean makeHouseCalls;
   void giveAdvice(){  //給出診斷 }
}

public class Surgeon extends Doctor{
   void treatPatient(){}
   void makeIncision(){}
}

Surgeon 有一個實例變量
FamilyDoctor 有兩個實例變量
Doctor 有一個方法
Surgenon 有三個方法
FamilyDoctor 有兩個方法

一,java子類可以繼承父類所有的屬性變量。private也能被繼承但是不能被訪問;可以通過public的Setter與Getter方法在父類調用。
二,子類繼承父類時,需要注意以下三點:
1、在子類繼承父類的時候,子類必須調用父類的構造函數。
2、如果父類有默認構造函數,子類實例化時自動調用,但如果父類沒有默認構造函數,即無形參構造函數,子類構造函數必須通過super調用父類的構造函數。
3、在java的繼承當中子類是不可以繼承父類的構造函數,只能調用父類的構造函數。

2.設計繼承

1.找出具有共同行爲和屬性的對象(即類和方法)
2.設計代表共同行爲狀態的類
3.決定子類是否需要覆蓋父類的方法
4.通過尋找使用共同行爲的子類來找出更多抽象化的機會
5.完成類的繼承層次
子類可以擴充父類的方法  例
void run() {
   super.run();
   //add other action
}

IS——A 測試來輔助完成繼承的設計

當調用對象的引用方法時,你會調用到與該對象繼承層次最接近的方法

3.繼承的意義

    減少了重複代碼, 提高了可維護性  某些情況下可以只動父型就可以完成項目需求的修改

    規定了一份合約,便於多態的實現(當你定義一組父型時,你可以用子型的任何類來填補父型的位置)

4.多態

運用多態的例子
Animal [] animals = new Animal[4];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Worf();
animals[3] = new Taiger();
for( int i=0; i < animals.length; i++){
		animals[i].eat();   //會調用不同的動物自己獨特的的喫的方式
	}
參數和返回類型也可以多態
class Vet{
		public void giveShot( Animal a ){
					a.makeNoise();
			}
	}
	class PetOwner{
			public void start(){
						Vet v = new Vet;
						Dog d = new Dog();
						Hippo h = new Hippo();
						v.giveShot( d );  //會執行Dog的makeNoise 
						v.giveShot( h );  //會執行Hippo的makeNoise
				}
		}
關於繼承的思考
1.可以通過繼承來覆蓋設計不好的類, 用新的方法來覆蓋之前父類不適宜的方法
2.控制類防止被繼承的方法  一.權限控制(設定爲private 或者默認權限) 二.使用final修飾的類不能被繼承(是爲了確保方法都是自己所寫的版本)三.讓類的構造函數私有(private)
3.可以只用final來標識類中的方法而不標識整個類  這樣就可以防止方法被覆蓋(不想方法被覆蓋時)

5.覆蓋的規則

    編譯器會尋找引用類型的來決定你是否可以調用該引用的特定方法,但在執行期間Java虛擬機尋找的是存在堆上的對象

    參數必須一樣,返回類型要兼容

    不能降低方法的存取權限(權限必須相同或者更高)

6.方法的重載

方法的重載
意義是方法的名稱相同但是參數不同所以,重載和多態毫無關係
重載可以有一個方法的不同參數版本 
1.重載的返回類型可以不同
2.不能只改變返回類型
3.可以更改存取權限

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章