Rumah  >  Soal Jawab  >  teks badan

java - 关于抽象类的一个小问题

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

高洛峰高洛峰2712 hari yang lalu529

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理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 老虎());
    

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

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

    balas
    0
  • 怪我咯

    怪我咯2017-04-17 13:40:34

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

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

    balas
    0
  • 迷茫

    迷茫2017-04-17 13:40:34

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

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

    balas
    0
  • Batalbalas