天天看點

教你将好鋼用在刀刃上-應用抽象類 | 帶你學《Java面向對象程式設計》之五十四

上一篇:使用抽象類的注意事項 | 帶你學《Java面向對象程式設計》之五十三

【本節目标】

通過閱讀本節内容,你将對抽象類的存在有更深入的了解,并能夠簡答的從實際生活中的多種事物中抽象出統一的特征,形成抽象類。

模闆設計模式

抽象類的本質上就屬于一個加強型的類,那麼對于類已經清楚了,可以描述一切的有關的現實事物,但是通過分析也可以發現,抽象類的設計應該是比類更高一層的定義。那麼下面來研究一下抽象類的實際應用。

假如現在要描述有三類的事務:

  • 機器人:不休息,隻知道補充能量和工作;
  • 人類:需要休息、需要吃飯以及努力地工作;
  • 豬:需要休息、不需要工作隻需要吃飯。
教你将好鋼用在刀刃上-應用抽象類 | 帶你學《Java面向對象程式設計》之五十四

圖一 抽象類

範例:實作代碼操作

abstract class Action { 
    public static final int EAT = 1 ;
    public static final int SLEEP = 5 ;
    public static final int WORK = 10 ;   
    public void command(int code) {
        switch(code) {
            case EAT : {
                this.eat () ;
                break ;
            }
            case SLEEP : {
                this.sleep () ;
                break ;
            }
            case WORK : {
                this.work () ;
                break ;
            }
            case EAT + SLEEP + WORK : {
                this.eat () ;
                this.sleep () ;
                this.work () ;
                break ;
            }
        }
    }
    public abstract void eat () ;
    public abstract void sleep () ;
    public abstract void work () ;
}
class Robot extends Action {
    public void eat () {
        System.out.println(“機器人需要接通電源充電。”) ;
    }
    public void sleep () {}
    public void work () {
        System.out.println(“機器人按照固定的套路進行工作。”) ;
    }
}
class Person extends Action {
    public void eat () {
        System.out.println(“餓的時候安靜的坐下吃飯。”) ;
    }
    public void sleep () {
        System.out.println(“安靜的躺下,慢慢的睡着,而後做着美麗的夢”) ;
    }
    public void work () {
        System.out.println(“人類是進階腦類動物,是以要有想法的工作。”) ;
    }
}
class Pig extends Action {
    public void eat () {
        System.out.println(“吃食槽中的人類的剩飯。”) ;
    }
    public void sleep () {
        System.out.println(“倒地就睡。”) ;
    }
    public void work () {}
}
public class JavaDemo {
    public static void main(String args[]) {
        Action robotAction = new Robot() ;
        Action personAction = new Person() ;
        Action pigAction = new Pig() ;
        System.out.println(“--------------機器人行為--------------”) ;
        robotAction.command(Action.SLEEP) ;
        robotAction.command(Action.WORK) ;
        System.out.println(“--------------人類的行為--------------”) ;
        personAction.command(Action.SLEEP + Action.EAT + Action.WORK) ;
        System.out.println(“--------------豬類的行為--------------”) ;
        pigAction.work() ;
        pigAction.eat() ;
    }
}           
教你将好鋼用在刀刃上-應用抽象類 | 帶你學《Java面向對象程式設計》之五十四

圖二 執行結果圖

現在的程式已經完整的實作了一個行為的抽象處理,但是也需要做出一點點思考。現在定義的Action父類主要的目的:對所有行為規範進行統一處理。

抽象類最大的好處一是對子類方法的統一管理,二是可以自身提供有一些普通方法并且這些普通方法,并且這些普通方法可以調用抽象方法(這些抽象方法必須在有子類提供實作的時候才會生效)。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:包裝才更美:初識包裝類 | 帶你學《Java面向對象程式設計》之五十五 更多Java面向對象程式設計文章檢視此處