2016/5/6

抽象類別與方法abstract

承上篇:多型(Polymorphism):重新定義實作@Override
並參考1:良葛格-抽象方法、抽象類別
參考3:Gossip@Openhome
參考4:Davidou's Blog-[Java]6.抽象(Abstract)與介面(Interface)
參考5:Java 介面(Interface)與抽象類別(Abstract class)的差異

如果一個class裡有一個抽象方法abstract method,那這個類別就必須定義為抽象類別abstract class 。
1
2
3
4
5
6
package Cast;
public abstract class Role {
    ......
    public abstract void fight();
    ......
}
abstract method宣告方式:不用{},直接 ; 結束即可。
abstract class宣告方式:一定要在class前加abstract關鍵字。


在NetBeans IDE 8.1中,abstract class圖案會變灰的,下面可看到Role.java圖案是灰色:


什麼時候才會用到abstract method?
如果當一個method並沒有實作內容時,內容為空,就可把此method做成abstract method。

抽象類別特性:
  • 可當成父類別 (superclass) 給子類別 (subclass) 繼承 (inherit) 。
  • 不能被實體化。像上述程式碼如Role role = new Role(); 會無法編譯!abstract method也是一樣不能new,它只能被擴充,並於擴充後完成未完成的abstract method定義!
  • 如一個繼承了abstract class的subclass,如沒實作abstract class中的abstract method,那該子類別需定義成abstract class,請看例1。
例1:
1
2
3
4
5
6
package Cast;
public class SwordsMan extends Role {
    /*public void fight() {
        System.out.println("揮劍攻擊");
    }*/
}
這段程式碼會編譯錯誤,因SwordsMan繼承了Role這個abstract class,但沒實作fight()方法,必須再class前加入abstract關鍵字才通過編譯。

沒有留言:

張貼留言