- 浏览: 101571 次
- 性别:
- 来自: 北京
文章分类
最新评论
继承是代码重用的有力武器,但是它并不是完成这项工作的最佳工具,不适当的使用继承会导致脆弱的软件,在
一个包内部使用继承是非常安全的,子类和超类的实现在同一个程序员的控制之下,对于专门为了继承而设计并且
具有很好文档说明的类,使用继承也很安全。然而,对普通的具体类进行跨越包边界的继承则是非常危险的。
1,与方法调用不同,继承打破了封装性。
一个子类依赖于超类中特定功能的实现细节,超类的实现有可能随着发行版本的不同而变化,如果真的发生了
变化,子类可能被打破。造成子类脆弱的另一个原因是,它们的超类在后续版本中可以获得新的方法,而这个新的
方法的名字有可能与子类的方法有共同的签名,这样就会产生覆盖或重载。
2,只有当子类真正是超类的"子类型"的时候,继承才是合适的。换句话说,对于两个类A和B,只有当两者之间
确实存在"is-a"关系的时候,类B才应该扩展类A。如果你打算让类B扩展类A,那么你应该问自己:"每一个B确实也
是A么?"如果你不能确定这个问题的答案是yes,那么B就不应该扩展A。
总之,继承机制的功能非常强大,但是它存在许多问题,因为它违背了封装原则,只有当子类和超类之间确实存
在子类型关系时,使用继承才是合适的。即便如此,如果子类和超类在不同的包中,并且超类不是为了扩展而设计
的,那么继承将会导致脆弱性,为了避免这种脆弱性,可以用复合和转发机制来代替继承,尤其是当存在一个适当
的接口来实现一个包装类的时候。
一个包内部使用继承是非常安全的,子类和超类的实现在同一个程序员的控制之下,对于专门为了继承而设计并且
具有很好文档说明的类,使用继承也很安全。然而,对普通的具体类进行跨越包边界的继承则是非常危险的。
1,与方法调用不同,继承打破了封装性。
一个子类依赖于超类中特定功能的实现细节,超类的实现有可能随着发行版本的不同而变化,如果真的发生了
变化,子类可能被打破。造成子类脆弱的另一个原因是,它们的超类在后续版本中可以获得新的方法,而这个新的
方法的名字有可能与子类的方法有共同的签名,这样就会产生覆盖或重载。
2,只有当子类真正是超类的"子类型"的时候,继承才是合适的。换句话说,对于两个类A和B,只有当两者之间
确实存在"is-a"关系的时候,类B才应该扩展类A。如果你打算让类B扩展类A,那么你应该问自己:"每一个B确实也
是A么?"如果你不能确定这个问题的答案是yes,那么B就不应该扩展A。
总之,继承机制的功能非常强大,但是它存在许多问题,因为它违背了封装原则,只有当子类和超类之间确实存
在子类型关系时,使用继承才是合适的。即便如此,如果子类和超类在不同的包中,并且超类不是为了扩展而设计
的,那么继承将会导致脆弱性,为了避免这种脆弱性,可以用复合和转发机制来代替继承,尤其是当存在一个适当
的接口来实现一个包装类的时候。
发表评论
-
Deployment failure on Tomcat 6.x.
2012-03-06 17:56 855在用MyEclipse6.5做项目时发现这样的问题:Deplo ... -
页面缓存时间设置
2012-02-22 12:45 0http://www.go2pad.com/space-201 ... -
url 中文转码
2012-02-20 11:10 2655我想,URL传参中文对于程序员来说,是个很头疼的问题吧。虽然在 ... -
html meta
2011-12-02 11:16 694meta是用来在HTML文档中模拟HTTP协议的响应头报文。m ... -
css
2011-12-02 10:54 1750一、如何创建 CSS插入样 ... -
JDK&JRE区别
2011-11-28 18:28 723对于java初学者来说,往往不懂区分jdk和jre的区别,实际 ... -
jsp页面不缓存
2011-11-25 09:01 808html <meta http-equiv =& ... -
将双引号(“”) 存入数据库的处理方法
2011-11-15 20:00 822将双引号(“”) 存入数据库的处理方法: 例如 :“恐男症”女 ... -
解决时分秒不能写入Date类型字段中
2011-11-02 18:48 1079CallableStatement cstmt = null; ... -
StringBuffer内容清空效率比较
2011-10-31 18:08 830在开发程序的时候,经常使用StringBuffer来进行字符串 ... -
tl标签常用方法
2011-10-31 17:46 793函数名 函数说明 使用举例 fn:contains 判断 ... -
Test.java
2011-10-21 11:44 639Test.java右键Run as RUN CONFIGUR ... -
myeclipse把maven普通java项目变成web项目的全程操作
2011-10-20 11:47 806http://apps.hi.baidu.com/share/ ... -
用线程调用方法
2011-10-13 16:25 799package nkc.util; import ... -
json转换为java对象
2011-10-11 19:43 1750json数组格式 [{},{}] 转换 List<Li ... -
java 事件
2011-10-10 10:10 7461.创建事件源 EventSource source = ne ... -
LazySingleton 单例模式
2011-10-10 10:00 806public class LazySingleton{ ... -
EventObject类
2011-10-10 09:31 1611开发者经常要基于Observer模式创建事件监听系统(Even ... -
超强过滤器彻底解决JSP/SERVLET中文参数GET/POST传递的问题
2011-09-19 13:57 1326query = new String(query.getByt ... -
Quartz Cron Expression
2011-08-16 09:34 790Quartz Cron Expression 原文解释: ...
相关推荐
5. 复合优先于继承:复合可以避免继承的缺陷,如破坏封装性和依赖于父类的实现。 6. 接口优于抽象类:接口可以提供更加灵活的设计方式,可以使得类更加灵活和可扩展。 7. 谨慎使用可变参数:可变参数可以使代码...
* 复合优先于继承,避免继承容易破坏封装性。 * 接口优于抽象类,java是单继承的,但是类允许实现多个接口。 * 方法可变参数要谨慎使用,避免传0个参数的参数个数在1~多个之间。 * 精确计算,避免使用float和double...
例如,应该避免创建不必要的对象,尽量使类和成员的可访问性最小化,复合优先于继承,接口优于抽象类等。此外,方法的设计中要注意可变参数的使用、异常的处理、返回值的处理等。 性能优化的知识点包括性能评价/...
- **复合优先于继承**:使用组合而非继承,可以减少代码的耦合度,提高灵活性。 - **接口优于抽象类**:在多数情况下,接口提供了一种更加灵活的方式来定义类的行为。 ##### 2. 方法 - **可变参数要谨慎使用**:可...
层叠性遵循“就近原则”,即样式越接近元素,其效果越优先。当样式不冲突时,它们将并存,而不会相互覆盖。 继承性则是CSS中的一种特性,允许子元素从父元素那里继承某些样式,如文本颜色、字号等。继承可以简化...
例如,通过组合,我们可以创建一个包含多个不同功能的类的复合体,而不需要这些功能之间存在继承关系。 以上原则为面向对象设计提供了坚实的理论基础,它们共同构成了面向对象编程语言中最重要的设计理念之一。遵循...
七、继承与复合 继承是C++语言中的一种机制,它允许一个类继承另一个类的成员变量和成员函数。继承包括继承中的存取控制、构造、析构的调用顺序、私有继承、运算符重载与继承、upcasting等。 八、多态性与虚函数 ...
表达式`7.5+1/2+45%10`中,整数除法和模运算优先于浮点数加法,因此结果为12.5。 C++的参数传递机制有两种:传值和传地址。如果需要在函数内部修改实参的值或者返回多个值,通常使用传地址的方式,即通过指针传递。...
- **复合优于继承**:复合避免了子类对父类实现的依赖,增强了设计的灵活性和封装性。 - **接口优于抽象类**:Java支持单一继承,但可以实现多个接口。当业务变化时,更适合通过增加接口来实现,而不是修改抽象类...
Python面向对象编程思想的核心概念和设计原则 面向对象是一种编程思想,它以人类对现实世界的观察为...6. 组合复用原则:优先使用组合,次要使用继承。 这些原则可以帮助我们编写更加灵活、可维护、可扩展的代码。
3. 类包含数据变量和方法,是Java中的复合数据类型,Java的类只支持单继承。 4. 可以作为类及其成员的修饰符有protected和public,但题目中问的是不正确的选项,所以答案可能是其他选项。 5. 公共修饰符public不能...
继承性允许子元素继承父元素的一些样式,而优先级则是根据CSS规则的来源和特定性来确定哪些规则优先应用。 教学过程中,教师可以采用问题引导的方式激发学生思考,如回顾HTML的`<!DOCTYPE>`标记的作用,强调其在...
在表达式和基本语句的编写中,了解运算符优先级,合理使用复合表达式,以及编写高效且逻辑清晰的IF语句和循环语句是基础。此外,还应当注意 SWITCH 语句的使用和 GOTO 语句的限制,以避免代码混乱。 常量的使用在...
第二章 高级程序设计方法.ppt:这一章节主要探讨了如何编写高效且可维护的代码,涵盖面向对象编程的基本概念,如类、对象、继承、多态等。此外,还可能涉及函数式编程和泛型编程,以及设计模式在实际开发中的应用。 ...
3. **优先使用对象组合**:相对于继承,设计模式更多地推荐使用对象组合的方式来构建组件。这种方式更加灵活,可以更容易地扩展和修改组件的行为。例如,装饰器模式允许动态地给一个对象添加一些额外的职责,而不必...
此外,试题还可能涉及到Python的高级特性,如列表、元组、字典、集合等复合数据结构的运用,以及面向对象编程的概念,如类与对象、继承、封装和多态。对于算法部分,考生需要掌握基本的排序算法(如冒泡排序、选择...
例如,在`<p class="update">`这样的元素中,`class="update"`的样式将优先于元素`p`的默认样式应用,这一原则在处理复杂的样式层级时尤为重要。 #### 技巧八:灵活运用多重class定义 一个HTML元素可以拥有多个...
优先使用复合胜过继承8.接口优于抽象类9. 可变参数谨慎使用10. 尽量不要返回NULL,尽量返回零数组或集合11.优先使用标准异常12.尽量使用枚举替换int13. 局部变量作用域最小化14. 对于精度技术不用float或double15....