博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-组合优于继承
阅读量:7026 次
发布时间:2019-06-28

本文共 1898 字,大约阅读时间需要 6 分钟。

组合和继承。都能实现对类的扩展。

差别例如以下表所看到的

组合
继承
has-a关系 is-a关系
执行期决定 编译期决定
不破坏封装,总体和局部松耦合 破坏封装,子类依赖父类
支持扩展,任意添加组合类 仅仅能继承一个父类,必须包括全部方法,添加系统复杂性
动态选择组合类方法 复用父类方法
以下通过一个样例说明,子类继承必须包括全部父类方法,添加了出错率。改动父类方法会引起全部子类功能变化。

/** * 呼叫基类 *  * @author peter_wang * @create-time 2014-5-20 下午4:30:33 */public class SuperCallClass {    public void call() {    }    public void operate1() {        System.out.println("operate1 in super class");    }        public void operate2() {        System.out.println("operate2 in super class");    }    /**     * 冗余的函数,导致子类臃肿,破坏了封装。添加了出错机会     */    public void redundant() {        System.out.println("redundant in super class");    }}
/** * 呼叫子类 *  * @author peter_wang * @create-time 2014-5-20 下午4:32:22 */public class SubCallClass    extends SuperCallClass {    @Override    public void operate1() {        //破坏了封装。无意中引入了基类方法        super.operate1();        System.out.println("operate in sub class");    }    @Override    public void call() {        super.call();        operate1();    }}
/** * 分析继承和组合 *  * @author peter_wang * @create-time 2014-5-20 下午4:37:31 */public class CallClassDemo {    /**     * @param args     */    public static void main(String[] args) {        SubCallClass subCallClass = new SubCallClass();        subCallClass.operate1();    }}

组合类的使用

/** * 呼叫组合类 *  * @author peter_wang * @create-time 2014-5-20 下午5:11:34 */public class CombineCallClass {    private SuperCallClass mSuperCallClass;    public CombineCallClass() {        mSuperCallClass = new SuperCallClass();    }    public void operate1() {        System.out.println("operate in combine class");    }    /**     * 仅仅须要使用到SuperCallClass中的operate2方法     */    public void operate2() {        mSuperCallClass.operate2();    }    public void call() {        operate1();    }}

综上概述:

组合通常优于继承。

1.考虑使用多态。能够用继承。
2.考虑复用父类方法,并且父类非常少修改。能够用继承。
其它情况请谨慎使用继承。

转载于:https://www.cnblogs.com/yutingliuyl/p/6810029.html

你可能感兴趣的文章
算法学习之路|万绿丛中一点红
查看>>
Zabbix低级发现结合jstat命令自动监控Java进程(jdk 1.8版本)
查看>>
zabbix3.4.4集成graphtrees图文笔记
查看>>
国家网络安全产业园区落户北京
查看>>
算法学习之路|wifi密码
查看>>
V-4-3 访问vCenter与操作
查看>>
运维DBA的4大纪律9项注意【转】
查看>>
写python的常用工具及设置
查看>>
PLSQL Developer软件使用大全
查看>>
PHP5.3.3添加安装mcrypt模块
查看>>
salt-minion自动化安装脚本
查看>>
给硬盘加密
查看>>
【CDN 常见问题】CDN协议跟随回源常见问题
查看>>
带账号、密码ssh的脚本
查看>>
Exchange Server 2010客户端的安全访问
查看>>
申请带@msn.com后缀的邮箱
查看>>
服务器断电导致虚拟机数据丢失怎么恢复?
查看>>
Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能...
查看>>
浅撸 css3 flex 布局
查看>>
域用户和工作组
查看>>