抽象方法
案例引入:
在某個寵物店的寵物資源管理系統中有:
狗類:屬性(姓名),行為(吃飯)
貓類:屬性(姓名),行為(吃飯)
利用繼承技術,定義動物類Animal、貓類Cat和狗類Dog,并實現效果:
小狗大黃每天都抱著骨頭一頓啃
小貓小花每天都抓一只老鼠當晚餐
//1.定義Animal動物類,作為父類,放入貓和狗的共有內容(屬性、行為)
//public class Animal {//1.根據需求可知,要將共有的屬性和行為放入//屬性:姓名String name;//行為:吃飯public void eat() {//我們只知道每一種動物都能吃,但是不同動物吃什么、怎么吃不能具體描述。就定義成抽象方法}
public class Cat extends Animal{public void eat() {System.out.println("小貓" + name + "每天都抓一只老鼠當晚餐");}
}
public class Dog extends Animal {//父類Animal的eat方法不能滿足狗類的需求,子類重寫方法public void eat() {System.out.println("小狗" + name + "每天都抱著骨頭一頓啃");}
}
本案例中,父類Animal有什么問題?
eat方法沒有實際代碼內容
改進:
注意:抽象方法必須在抽象類中
public abstract class Animal {//1.根據需求可知,要將共有的屬性和行為放入//屬性:姓名String name;//行為:吃飯//抽象方法用abstract修飾,注意:抽象方法必須在抽象類中public abstract void eat();
}
/*** 貓類,繼承Animal動物類*/
public class Cat extends Animal{//重寫父類的eat方法@Overridepublic void eat() {System.out.println("小貓" + name + "每天都抓一只老鼠當晚餐");}
}public class Dog extends Animal {//父類Animal的eat方法不能滿足狗類的需求,子類重寫方法@Overridepublic void eat() {System.out.println("小狗" + name + "每天都抱著骨頭一頓啃");}
}
抽象方法和抽象類
- 當定義方法時,不確定方法的具體內容,就可以定義成抽象方法,抽象方法使用關鍵字 abstract 修飾
- 抽象方法只能放在抽象類中,抽象類用關鍵字 abstract 修飾
注意:
- 抽象類不能創建對象,需要作為父類讓子類繼承
- 子類繼承抽象類,這個類必須重寫所有的抽象方法
- 抽象類的作用是作為父類讓子類去繼承的
//將Animal動物改造成了抽象類,它的eat方法變成了抽象方法
public abstract class Animal {String name;//抽象方法用abstract修飾,注意:抽象方法必須在抽象類中public abstract void eat();//嘗試創建Animal對象,報錯!(注意:抽象類不能創建對象)//new Animal();}
//定義老鼠類,繼承Animal類
public class Mouse extends Animal {//子類繼承抽象父類時,必須重寫父類的所有抽象方法@Overridepublic void eat() {System.out.println("老鼠吃大米!");}
}