Rumah > Soal Jawab > teks badan
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
子类的共同特征都在抽象类中实现,子类不需要重复实现
同时也可定义抽象方法,表达一些有类似行为,但是表现形式不同,强制子类具体实现
目的:使得子类表现出相同的行为接口,具体表现形式又有所不同