zoukankan      html  css  js  c++  java
  • 接口和抽象类的区别联系(二)

    需求一:普通门

    版本1.0

    abstract class Door {
        public abstract void open();
        public abstract void close();
    }
    class NormalDoor extends Door {
        @Override
        public void open() {}
        @Override
        public void close() {}
    }

    版本2.0

    abstract interface Door {
        public abstract void open();
        public abstract void close();
    }
    
    class NormalDoor implements Door {
        public void open() {}
        public void close() {}
    }

    需求二:报警门

    版本1.0

    abstract class Door {
        public abstract void open();
        public abstract void close();
        public abstract void alarm();
    }
    
    class NormalDoor extends Door {
        @Override
        public void open() {}
        @Override
        public void close() {}
        @Override
        public void alarm() {}
    }

    版本2.0

    abstract interface Door {
        public abstract void open();
        public abstract void close();
        public abstract void alarm();
    }
    
    class NormalDoor implements Door {
        public void open() {}
        public void close() {}
        public void alarm() {}
    }

    版本3.0

    abstract class Door {
        public abstract void open();
        public abstract void close();
    }
    
    abstract interface Alarm{
        public abstract void alarm();
    }
    
    class NormalDoor extends Door implements Alarm {
        @Override
        public void open() {}
        @Override
        public void close() {}
        public void alarm() {}
    }

    点评:

    普通门中,版本1.0 如果添加一个非抽象方法,则子类自动具有,不需要改代码(优势)

    报警门中,版本1.0 所有子类,都要实现报警,但好多门是不需要报警的(劣势)

    报警们中,版本2.0 因为接口添加了一个报警功能,使得所有用到该接口的都得改代码,不然编译不通过。(劣势)

    报警们中,版本3.0 合适得处理方式

    接口是对行为的抽象,普通门2.0 和 报警门2.0 都不合适。

    抽象类是对对象的抽象,所以普通门1.0 合适。

  • 相关阅读:
    tornado源码分析-多进程
    create a cocos2d-x-3.0 project in Xcode
    记录自己的傻逼的错误:找不到或无法载入主类
    MVC5 Entity Framework学习之实现主要的CRUD功能
    Linux中实现多网卡绑定总结
    it码农之心灵鸡汤(一)
    【高级算法】遗传算法解决3SAT问题(C++实现)
    MySQL-分区表-1
    OpenSift源代码编译过程记录
    Android Studio 视图解析
  • 原文地址:https://www.cnblogs.com/zno2/p/4571523.html
Copyright © 2011-2022 走看看