首頁  >  問答  >  主體

java - 关于抽象类的一个小问题

abstract class 猫科{
abstract void 叫();
}
class 猫 extends 猫科{
void 叫(){
System.out.println("喵");
}
}
class 老虎 extends 猫科{
void 叫(){
System.out.println("嚎");
}
}
为什么多此一举的去定义一个抽象类呢?
class 猫{
void 叫(){
System.out.println("喵");
}
}
class 老虎{
void 叫(){
System.out.println("嚎");
}
}
直接这样不好吗?

高洛峰高洛峰2763 天前560

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 13:40:34

    Java初學, 說點見解:

    首先來個高階的概念, 前者我們通常稱之為設計模式之策略模式;

    說下這種模式對應的場景:

    假如現在你某個類別想呼叫老虎方法, 怎麼辦? 用你後面的定義方式:

    class 别管我叫什么 {
        static void call(猫 cat) {
            cat.叫();
        }
    
        static void call(老虎 tiger) {
            tiger.叫();
        }
    }
    
    别管我叫什么.call(new 猫());
    别管我叫什么.call(new 老虎());
    

    哎呀, 同樣的代碼, 我要寫兩遍誒! 現在是代碼量小, 我還可以不怕麻煩人肉寫. 如果代碼很大的? 不但寫起來費力氣, 維護起來也噁心人啊!

    好了, 現在由策略模式來解放你!

    class 别管我叫什么 {
        static void call(猫科 cat) {
            cat.叫();
        }
    }
    
    别管我叫什么.call(new 猫());
    别管我叫什么.call(new 老虎());
    

    有麼有很簡單! 寫起來好省心的說! 後面維護這段程式碼的人都會在心裡默默的感謝你!

    =============================================== ==============
    只是老闆會不高興: 丫給你這麼多錢, 你就給我寫這幾行代碼?!

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 13:40:34

    用來保證所有貓科動物都能叫

    沒有這個抽象類,誰知道你定義的阿貓阿虎會不會叫啊

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:40:34

    子類別的共同特徵都在抽象類別中實現,子類別不需要重複實作
    同時也可定義抽象方法,表達一些有類似行為,但是表現形式不同,強制子類別具體實現

    目的:使得子類別表現出相同的行為介面,具體表現形式又有所不同

    回覆
    0
  • 取消回覆