zoukankan      html  css  js  c++  java
  • 9. 实现类复用的两个手段——继承与组合

    一、实现类复用概述

    1. 如果需要复用一个类,可以把这个类当成基类来继承

    • 如果访问权限允许,子类可以直接访问父类的成员变量和方法,相当于子类可以直接复用父类的成员变量和方法
    • 继承带来高度复用的同时,也严重地破坏了父类的封装性
    • 如果只是出于类复用的目的,并不一定需要使用继承,完全可以使用组合来实现

    2. 如果需要复用一个类,还可以把这个类当成新类的组合成分

    • 新类可以直接复用这个类的public成员变量和方法

    二、实现类复用的补充说明

    1. 继承方式中,子类可以直接获得父类的public方法,程序使用子类时,将可以直接访问该子类从父类那里继承到的方法

    2. 组合把旧类对象作为新类的成员变量组合进来,用以实现新类的功能

    • 用户看到的是新类的方法,而不能看到被组合对象的方法,故通常需要在新类里使用private修饰被组合的旧类对象

    补:仅从类复用的角度来看,父类的功能等同于被组合的类,都将自身的方法提供给新类使用。

    三、用继承还是组合?

    1. 继承要表达的是“是(is-a)”的关系,而组合表达的是“有(has-a)”的关系

    • 继承是对已有的类做一番改造,以此获得一个特殊的版本,即将一个较为抽象的类改造成能适用于某些特定需求的类,如Animal类和Wolf类
    • 如果两个类之间有明确的整体、部分的关系,此时就应该采用组合关系来实现复用,如Person类复用Arm类时就应使用组合的方式
  • 相关阅读:
    Yii笔记之filter用法 j神
    [转载]C# 剪切板编程 Clipboard
    [转载]3521工程
    [原创]获取委托链方式,用于多播委托。
    [转载]C#为应用程序注册快捷键 Ctrl+C Ctrl+V
    【原创】序列化/反序列化
    【原创】WinForm操作EXCEL(第三方插件NPOI)
    【原创】MyXls导出Excel (适用于Winform/WebForm)
    【原创】特性与反射(一)
    【原创】特性与反射(二)
  • 原文地址:https://www.cnblogs.com/xzxl/p/10994444.html
Copyright © 2011-2022 走看看