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

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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(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 老虎());

有么有很简单! 写起来好省心的说! 后面维护这段代码的人都会在心里默默的感谢你!

=============================================================
只是老板会不高兴: 丫给你这么多钱, 你就给我写这几行代码?!

刘奇

用来保证所有猫科动物都能叫

没有这个抽象类,谁知道你定义的阿猫阿虎会不会叫啊

迷茫

子类的共同特征都在抽象类中实现,子类不需要重复实现
同时也可定义抽象方法,表达一些有类似行为,但是表现形式不同,强制子类具体实现

目的:使得子类表现出相同的行为接口,具体表现形式又有所不同

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!