java - 关于抽象类的一个小问题
高洛峰
高洛峰 2017-04-17 13:38:34
0
3
512

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("嚎");
}
}
直接这样不好吗?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(3)
大家讲道理

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 老虎());

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

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

刘奇

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

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

迷茫

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!