`
javatar
  • 浏览: 1709310 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

什么时候可以用继承

 
阅读更多
摘自《Java Design》

对于超类A和子类B,必需满足:

命题“B是一个由A扮演的角色”不成立。

B永远不需要转型成为其他某些类别中的对象。

B扩展而不是覆盖或废弃A的行为(即Liskov原则)。

A不仅仅是一个工具类(一些可以重用的实用功能)。

对于一个问题域(特定的业务对象环境):A和B定义了同一类型的对象,或者是用户事务、角色、实体(团体、位置或其他东西),或其他物体的相似类别。

否则,改用关联关系可能更加稳固、正确。
分享到:
评论
1 楼 leadyu 2007-07-31  
我的做法是很多的情况采用复合的方式,而不是继承,除非具有严格意义的继承关系的两个对象才采用。

毕竟设计的时候不仅要考虑通用和扩展性,还要考虑易于理解和思维惯性,因为其他人大都是在黑盒子的情况下使用你的组件,所以两个继承关系的类需要满足javatar兄上面所介绍的关系时,才比较安全。

相关推荐

    继承与访问修饰符知识点

    继承与访问修饰符是面向对象编程中的核心概念,它们在定义类的结构和关系时起着至关重要的作用。本文将详细探讨这两个主题,以便更好地理解它们如何影响...理解它们的使用可以帮助我们编写出更高效、更易于维护的软件。

    JAVA中什么是继承.docx

    Java 继承的工作原理是:在编辑和运行一个 Java 程序的时候,需要同时涉及到这四个方面。使用文本编辑软件或集成开发环境在 Java 源文件中定义不同的类,通过调用类中的方法访问资源系统,将源文件编译成二进制中间...

    支付宝继承安卓官方demo

    "支付宝继承安卓官方demo"是一个针对Android开发者的重要资源,它可以帮助开发者快速理解和接入支付宝的各项服务。这个demo通常包含了完整的代码示例,以及详细的操作流程,对于学习和实践支付宝SDK的使用具有很高的...

    Applocation多继承.rar

    首先,让我们理解一下为什么要进行多继承。这可能是为了将不同的功能模块(如网络请求管理、数据库初始化、全局变量等)封装到各自的Application子类中,以便更好地管理和维护代码。然而,Android系统只支持一个...

    面向对象封装继承和多态.docx

    * 子类如果继承了父类,子类就可以使用父类中所有的属性以及方法。 * 继承的好处:可重用。 * 注意: + 如果创建一个新的类,这个类默认会继承 Object。 + Java 中类只支持单继承。 + 子类继承父类的时候会自动去...

    为什么Java中继承多数是有害的

    大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系)。实际上80%的代码应该完全用interfaces写,而不是通过extends。“Java设计模式”一书详细阐述了怎样用接口继承代替实现继承。这篇文章描述设计者为...

    JS继承之借用构造函数继承和组合继承

    在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术(有时候也叫做伪造对象或经典继承)。这种技术的基本思想相当简单,即在子类型构造函数的内部...

    a标签的继承问题分析和解决

    3. **使用继承**:如果属性支持继承,且在前面的步骤中仍未确定值,浏览器会尝试从父元素中继承属性值。 4. **使用默认值**:如果以上步骤都无法确定值,浏览器将使用该属性的默认值。 在`<a>`标签的案例中,浏览器...

    java为何不能多继承的原因详解

    具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在多继承的第二个缺点;而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的...

    UML用例图之泛化(generalization)、扩展(extend)和包含(include)关系

    在画用例图的时候,理清用例之间的关系是重点。用例的关系有泛化(generalization)、扩展(extend)和包含(include)。其中include和extend最易混淆。下面我们结合实例彻底理清三者的关系。基本概念用例图...

    初学者python笔记(类的继承与多态—详解)

    文章目录一、类的组合与继承的区别二、类的...上篇文章分析了类的组合,那么什么时候用继承,什么时候用组合? 用组合:当类之间有显著不同,并且较小的类是较大的类所需要的组件时 用继承:当类之间有很多相同的功能

    PYTHON学习教程资源:继承和多态操作代码练习.docx

    在 OOP 程序设计中,当我们定义一个 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类(Subclass),而被继承的 class 称为基类、父类或超类(Base class、Super class)。 继承的好处 ---------- ...

    php面向对象全攻略 (七) 继承性

    在定义和实现一个类的 时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为 自己的内容,并加入若干新的内容。比如你现在已经有一个“人”这个类了,这个类里面有 两个成员

    收集高频Java面试题以及面试时候被问到的面试题.rar

    什么时候使用抽象类,什么时候使用接口 如果想让一部分方法拥有默认实现,使用抽象类。 如果想实现多重继承,必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口...

    你所不知的private继承

    但是我们在设计时真的有思考过什么时候应该用public继承,什么时候不该使用public继承,什么时候应该想想那些经常被我们遗忘的知识,让我们从它们被遗忘的角落里重拾它的光芒。例如private继承。  As we all know...

    CSS文档流与块级元素,css

    - **块级元素(Block Elements)**:这些元素通常独自占据一行,它们可以包含其他块级元素或内联元素。典型的块级元素包括`<p>`、`<div>`、`<h1>`到`<h6>`等。块级元素的特点是可以设置宽度和高度,以及内外边距和...

    C++多继承多态的实例详解

    多态的实现是因为使用了一种动态绑定的机制,在编译期间不确定调用函数的地址,在调用虚函数的时候,去查询虚函数指针所指向的虚函数表。 在多继承的情况下,每个基类都有自己的虚函数表。当派生类继承多个基类时,...

    里氏代换原则原文

    在1987年的OOPSLA大会上发表的一篇文章《Data Abstraction and Hierarchy》里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中的蕴涵的原理。2002年,软件...

    C++课件(VC演示,类,继承,封装,友元)

    在C++编程语言中,面向对象编程是一种核心概念,它主要包含类、对象、继承、封装和多态性等核心要素。在这个课件中,特别强调了"面向对象的妥协...在设计类时,应尽可能保持封装,只有在确实需要的时候才考虑使用友元。

Global site tag (gtag.js) - Google Analytics