第23天学习Java的笔记-抽象类
生活随笔
收集整理的這篇文章主要介紹了
第23天学习Java的笔记-抽象类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
抽象
1.抽象的概念
圖形一定可以計算面積,但是計算面積方法不確定;動物一定要吃東西,但是吃東西的方法不確定。
2.抽象方法和抽象類的格式、使用
package Demo2301;/* * 抽象方法,就是加上abstract關鍵字,然后去掉大括號,直接分號結束 * 抽象類:抽象方法所在的類,必須是抽象類才行。在class之前寫上abstract即可。 * * 如何使用抽象類和抽象方法: * 1.不能直接創建new抽象類對象。 * 2.必須用一個子類來繼承抽象父類。 * 3.子類必須覆蓋重寫抽象父類當中所有的抽象方法。 * 覆蓋重寫(實現):子類去掉抽象方法的abstract關鍵字,然后補上方法體大括號。 * 4.創建子類對象進行使用。 * * 注意事項: * 抽象方法中不一定只有抽象類,但抽象類必須要在抽象方法中。 * */public abstract class Animal {//這是一個抽象方法:代表吃東西,但是具體吃什么(大括號的內容)不確定。public abstract void eat();// public void nomalMethod(){ // // } } package Demo2301;public class Cat extends Animal{@Overridepublic void eat(){System.out.println("貓吃魚");} } package Demo2301;public class Dog extends Animal{public void eat(){System.out.println("狗吃骨頭");} } package Demo2301;public class DemoMain {public static void main(String[] args) {//Animal animal = new Animal();//錯誤寫法Cat cat = new Cat();cat.eat();Dog dog = new Dog();dog.eat();} }3.抽象方法和抽象類的注意事項
對于第2點:抽象類中,可以有構造方法,是供子類創建對象時,初始化父類成員使用的。
package Demo2302;public abstract class Fu {public Fu() {System.out.println("抽象父類的構造方法執行");}public abstract void eat(); } package Demo2302;public class Zi extends Fu {public Zi() {//super();System.out.println("子類構造方法執行");}@Overridepublic void eat() {System.out.println("吃飯");} } package Demo2302;/*不可以直接new父類,想要執行父類的構造方法,*只能通過new子類,通過子類構造方法自帶隱藏的super()進行調用*/public class DemoMain02 {public static void main(String[] args) {Zi zi = new Zi();zi.eat();} } //抽象父類的構造方法執行 //子類構造方法執行 //吃飯3.抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
package Demo2302;/* * 一個抽象類不一定含有抽象方法, * 只要保證抽象方法所在的類是抽象類,即可。 * 這樣沒有抽象方法的抽象類,也不能直接創建對象,在一些特殊場景下有用途。 * */public class MyAbstract { }4.抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則,編譯無法通過而報錯。除非從該子類也是抽象類。
對于第四點,有以下:
爺爺輩:
package Demo2303;public abstract class Animal {public abstract void eat();public abstract void drink(); }爸爸輩:
package Demo2303;/* * 抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則,編譯無法通過而報錯。 * 除非該子類也是抽象類:只重寫一個方法,但需要在dog的class前面加abstract。這里的Dog就是 * */ //沒有重寫父類中的所有方法,所以需要加上abstract public abstract class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃飯了");} }孫子輩:
package Demo2303; //抽象類的子類,必須重寫抽象父類中所有的抽象方法public class DogGolden extends Dog{@Overridepublic void drink() {System.out.println("金毛喝水了");} } package Demo2303;//抽象類的子類,必須重寫抽象父類中所有的抽象方法public class Dog2Ha extends Dog{@Overridepublic void drink() {System.out.println("二哈喝水了");} }main方法:
package Demo2303;public class DemoMain03 {public static void main(String[] args) {//Animal animal = new Animal();//錯誤,抽象類//Dog dog = new Dog();//錯誤,抽象類DogGolden dogGolden = new DogGolden();//這是普通類,可以直接new對象dogGolden.drink();dogGolden.eat();Dog2Ha dog2Ha = new Dog2Ha();dog2Ha.drink();dog2Ha.eat();} }總結
以上是生活随笔為你收集整理的第23天学习Java的笔记-抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何卸载干净32位的Office
- 下一篇: 继承复习-发均分红包案例