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("嚎");
}
}
直接这样不好吗?
猫科动物是要表达猫科动物都有的特征,比如都会叫,都有尾巴;
具体的猫、老虎的叫声和尾巴可以不一样;
谈论猫科动物时,我们直接说猫科动物会叫就好类,如果没有抽象类,没法表达这种
首先来个高端的概念, 前者我们通常称之为设计模式之策略模式;
说下这种模式对应的场景:
假如现在你某个类想调用猫和老虎的叫方法, 怎么办? 用你后面的定义方式:
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 老虎());
有么有很简单! 写起来好省心的说! 后面维护这段代码的人都会在心里默默的感谢你!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。