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

一、实现类复用概述

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

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

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

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

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

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

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

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

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

三、用继承还是组合?

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

  • 继承是对已有的类做一番改造,以此获得一个特殊的版本,即将一个较为抽象的类改造成能适用于某些特定需求的类,如Animal类和Wolf类
  • 如果两个类之间有明确的整体、部分的关系,此时就应该采用组合关系来实现复用,如Person类复用Arm类时就应使用组合的方式

原文地址:https://www.cnblogs.com/xzxl/p/10994444.html

时间: 2024-10-25 12:28:04

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

Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行

以下是类的代码: 1 var Functions = { 2 oFunctions: null, 3 add: function (oFunc, oNewFunc) { 4 var oNew = function () { 5 oFunc(); 6 oNewFunc(); 7 }; 8 return oNew; 9 } 10 }; 以下是测试代码: 1 function one() { 2 alert(1); 3 } 4 5 function two() { 6 alert(2); 7 } 8

IPV4理论知识3----分类编址址两级编址

IPV4理论知识3----分类编址址两级编址 前言 本次还是主要讲解IPV4方面的内容,因为这方面的内容比较多也比较重要,我就不在同意篇文章中介绍了,一个小知识点一个内容,看起来也不至于乱.如有问题,请指正. 两级编址 分类编址时,同一网络中的所有地址都属于同一个地址块,而每个地址块包含两个部分:网络ID和主机ID.网路ID是干嘛的来?还记得吗?主机ID呢?还记得0533-88888888哪个案例吗?网络ID指明了网络,主机ID则指明了连接到该网络的一台特定主机.对吧.下图描述了分类编址中一个I

Vue里面提供的三大类钩子及两种函数

在路由跳转的时候,我们需要一些权限判断或者其他操作.这个时候就需要使用路由的钩子函数. 定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数. 总体来讲vue里面提供了三大类钩子,两种函数1.全局钩子2.某个路由的钩子3.组件内钩子 两种函数: 1.Vue.beforeEach(function(to,form,next){}) /*在跳转之前执行*/ 2.Vue.afterEach(function(to,form))/*在跳转之后判断*/ 全局钩子函数 顾名思义,它是对

第9章 Java类的三大特性之一:继承

1.什么是继承 子类继承父类就是对父类的扩展,继承时会自动拥有父类所拥有的处private之外的所有成员作用:增加代码复用语法格式: class 子类名 extends 父类名{----}第9章 Java类的三大特性之一:继承例子: 1 //测试类,创建子类对象,可以直接调用属性和方法 2 public class testDog { 3 public static void main(String[] args) { 4 Dog dog = new Dog(); 5 dog.age=10; 6

转 OC温故:类的三大特性(封装,继承,多态)

原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符: 1 public,default,protected,private 访问权限依次递减,这样我们在定义类的时候,哪些字段和方法不想暴露出去,哪些字段和方法可以暴露,可以通过

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

C++类的继承与组合区别

C++的“继承”特性可以提高程序的可复用性.正因为“继承”太有用.太容易用,才要防止乱用“继承”.我们要给“继承”立一些使用规则: 一.如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B 继承A 的功能. 不要觉得“不吃白不吃”,让一个好端端的健壮青年无缘无故地吃人参补身体. 二.如果类B 有必要使用A 的功能,则要分两种情况考虑: (1)若在逻辑上B 是A 的“一种”(a kind of ),则允许B 继承A 的功能.如男人(Man)是人(Human)的一种,男孩(Boy)是男人的

关于类、抽象类和接口的继承关系

关于类.抽象类和接口的继承关系 一.类和抽象类 当实体类Impl继承一个抽象类Abstract,该实体类Impl可以不用实现抽象类Abstract中的所有方法,但是必须实现抽象类中的所有抽象方法. 二.类和接口 当实体类Impl直接实现接口Interface,那么该实体类Impl必须是想接口Interface里面的所有接口方法. 三.抽象类和接口 当抽象类Abstract实现接口Interface,抽象类可以实现接口中的部分接口方法,也可以完全不实现任何接口方法. 理解:因为抽象类的功能类似接口

Python全栈开发——类继承和组合

# 类组合将几个不相关的类组合在一起#什么时候用:当类之间有显著的不同,并且较小的类是较大的类所需组件时,用组合 class School: def __init__(self,name,addr): self.name=name self.addr=addr def zhao_sheng(self): print('%s is ' %self.name) class Course: def __init__(self,name,price,period,school): self.name=n