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("嚎");
}
}
直接这样不好吗?
大家讲道理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 老虎());
有麼有很簡單! 寫起來好省心的說! 後面維護這段程式碼的人都會在心裡默默的感謝你!
=============================================== ==============
只是老闆會不高興: 丫給你這麼多錢, 你就給我寫這幾行代碼?!
迷茫2017-04-17 13:40:34
子類別的共同特徵都在抽象類別中實現,子類別不需要重複實作
同時也可定義抽象方法,表達一些有類似行為,但是表現形式不同,強制子類別具體實現
目的:使得子類別表現出相同的行為介面,具體表現形式又有所不同