9. 实现类复用的两个手段——继承与组合

一、实现类复用概述

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

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

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

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

 

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

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

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

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

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

 

三、用继承还是组合?

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

  • 继承是对已有的类做一番改造,以此获得一个特殊的版本,即将一个较为抽象的类改造成能适用于某些特定需求的类,如Animal类和Wolf类
  • 如果两个类之间有明确的整体、部分的关系,此时就应该采用组合关系来实现复用,如Person类复用Arm类时就应使用组合的方式
posted @ 2019-06-09 19:13  GGBeng  阅读(703)  评论(0编辑  收藏  举报