关于抽象类的一个小问题 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于抽象类的一个小问题

蛮大人123 2016-02-27 14:38:29 1510

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

c++抽象类 抽象类问题
分享到
取消 提交回答
全部回答(2)
  • chankan
    2019-07-17 18:48:51

    猫科动物是要表达猫科动物都有的特征,比如都会叫,都有尾巴;
    具体的猫、老虎的叫声和尾巴可以不一样;
    谈论猫科动物时,我们直接说猫科动物会叫就好类,如果没有抽象类,没法表达这种

    0 0
  • 蛮大人123
    2019-07-17 18:48:51

    首先来个高端的概念, 前者我们通常称之为设计模式之策略模式;
    说下这种模式对应的场景:
    假如现在你某个类想调用猫和老虎的叫方法, 怎么办? 用你后面的定义方式:

    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 0
添加回答
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

最新问题