認識抽象類:
當我們在做子類共性功能抽取的時候,有些方法在父類中并沒有具體的體現,這個時候就需要抽象類了。在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類就定義為抽象類。
在Java中有一個abstract,它是抽象的意思,可以用它修飾類、成員方法。
package cn.ensource.d4_abstract;// 抽象類
public abstract class A {// 抽象方法,必須用abstract修飾,并且只有方法簽名,不能有方法體public abstract void run();
}
我們要注意的是:
抽象類不能創建對象。?
?A 是一個抽象類,不能被實例化。
抽象類僅作為一種特殊的父類,讓子類繼承并實現。
?A 類:
package cn.ensource.d4_abstract;// 抽象類
public abstract class A {private String name;public static String schoolName;public A() {}public A(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public static String getSchoolName() {return schoolName;}public static void setSchoolName(String schoolName) {A.schoolName = schoolName;}// 抽象方法,必須用abstract修飾,并且只有方法簽名,不能有方法體public abstract void run();
}
B類:
package cn.ensource.d4_abstract;// 抽象類:一個類繼承了抽象類,必須重寫完抽象類的全部抽象方法
public class B extends A{@Overridepublic void run() {System.out.println("B run");}
}
測試類:
package cn.ensource.d4_abstract;public class Test {public static void main(String[] args) {// 目標:認識抽象類和其特點// 注意:抽象類不能創建對象
// A a = new A();B b = new B();b.run();}
}
抽象類的場景和好處:
也就是說:所有子類都要完成這個方法。那我們在父類中抽象出這個抽象方法。
實現行為多態。
抽象類不是不能調用方法,是不能創建對象。
使用了抽象類,更專業,多態會更好!
強制子類重寫方法。
abstract類:
package cn.ensource.d4_abstract2;public abstract class Animal {private String name;public abstract void cry(); // 讓子類都進行重寫方法,由子類實現,對多態支持更好public String getName() {return name;}public void setName(String name) {this.name = name;}
}
?Cat類:
package cn.ensource.d4_abstract2;public class Cat extends Animal{@Overridepublic void cry() {System.out.println("喵喵~");}
}
Dog類:
package cn.ensource.d4_abstract2;public class Dog extends Animal{@Overridepublic void cry() {System.out.println("旺旺~");}
}
測試類:
package cn.ensource.d4_abstract2;public class Test {public static void main(String[] args) {// 掌握抽象類的好處Animal a = new Cat();a.setName("叮當貓");a.cry(); // 更好地支持了多態System.out.println(a.getName());}
}
抽象類的應用場景和超出是什么?
父類知道每個子類都要做某個行為,但每個子類要做的情況不太一樣,父類就定義成抽象方法,交給子類去重寫實現。我們抽象出來的抽象類,就是為了更好地支持多態。
抽象類我們不是非要用的。強制子類重寫。
用抽象類是最佳實踐,不用也是可以的。但是使用是最佳實踐。?
抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類。
抽象類是不能實例化的:
抽象類如何實例化呢?參照多態的方式,通過子類對象實例化,這叫抽象類多態。
抽象類的子類:
要么重寫抽象類中的所有抽象方法。
要么是抽象類。