首先來看代碼:
package abstractExample;
public abstract class AbstractClass { //抽象類
public void method1 () {
System.out.println("This is the first method");
}
public abstract void method2 (); //抽象方法,這個抽象方法不能有body體。
}
package abstractExample;
public class SubAbstractClass extends AbstractClass { //子類
@Override
public void method2() {
System.out.println("Override the Second method!");
}
// public void method1 () {
// System.out.println("Override the first method!");
// }
}
package abstractExample;
public class AbstractTest {
public static void main(String[] args) {
SubAbstractClass ab = new SubAbstractClass();
ab.method1();
ab.method2();
}
}
以下根據代碼來總結一下:
1.類中有抽象方法,這個類也必須是抽象類;
如果不是抽象類,會報錯。反之,一個抽象類裏可能有抽象類,也可能沒有抽象類。
2.抽象類不能有實體;
加上方法體,同樣會報錯。
3.不能實例化抽象類;
這麼寫同樣報錯。
4.子類必須實現抽象方法;
這個的前提條件是子類不是抽象類型的,當子類也是抽象類型的時候,可以不用實現超類的所有方法:
5.abstract關鍵字不能應用於static、private或final方法,因爲這些方法不能被重寫。
6.其實這次的代碼看着很眼熟。。。貌似是設計模式中的模板模式。。。。
其實拋開設計模式,在很多源碼中都應用到抽象類,舉個栗子,ClassPathXmlApplication的流程中:
有很多抽象方法,其實只知道abstract正確使用方式還是不足夠的,還必須知道abstract的作用,在什麼場合使用。