java--查看文章
 
《JAVA编程思想》第四版学习 需要我记住的something--多态
发布时间:2010-11-25
  • 上一篇文章:
  • 下一篇文章:

  • ">

    《JAVA编程思想》第四版学习 需要我记住的something--多态

    转自:http://blog.csdn.net/icesnows/archive/2009/06/10/4259012.aspx

    一. 面向对象编程三个基本特性:数据抽象(data abstraction)、继承(inheritance)和多态(polymorphism)。


    二.通过分离"做什么"和"怎么做",多态从另一个角度将接口与实现分离开。 
          多态不但能够改善代码组织结构和可读性,而且可以创建"可扩展"(extensible)的代码(无论是在项目最初创建时,还是在需要添加新功能时,都可以进行扩充)。
          多态-消除类型(types)之间的耦合关系(多个继承自同一基类的类都可以当做一种类型-基类来看待)。
          多态、动态绑定(dynamic binding)、后绑定(late binding)、运行时绑定(run-time binding)。

    三. 多态使程序更简洁,可扩展。不使用向上转型和多态,而采用重载的方式实现,那在扩充继承类的时候,将有大量的工作要做(如添加以新增类为参数的方法代码)。所以,忘记对象类型吧(该忘记的时候)。
    多态使你的代码变动不会破坏程序中不应受影响的其它部分,换句话说,多态是一项"将变化的事情与不变的事情分离开"的重要技术。


    四.绑定(binding):将一个方法调用同方法实体链接起来; 
          前绑定(early binding):绑定发生在程序运行之前(编译器、链接器完成);
          后绑定(late binding)、动态绑定、运行时绑定:在程序运行时,根据对象的具体类型进行绑定。需要某种机制在运行时确定对象具体类型,并调用对应方法。因此,对象中需要存储关于类型的信息。

         Java中除了static或final方法(private方法隐式final)外,都是后绑定。 
          final方法,禁止override;关掉后绑定,提高效率。但应只从设计角度出发考虑final,而不应从效率的角度出发,因为大多数情况下,final方法并不能提高程序整体性能,尤其是在后来的JVM中(采用HotSpot技术)。

    五.可扩展性:好的OOP程序,绝大多数或者全部方法应该只与基类接口打交道,这样的程序就是"可扩展"(extensible)的。


    六.错误:重写private方法。 private自动是final,因此不可重写,继承类中与基类private方法签名相同的方法只是个全新的method;由于private方法在继承类中不可见,因此也不会是重载。

    七.直接访问field和static方法都不是多态的,均为在编译期解析绑定。super.field,在继承类中访问基类field。

    八.构造器不具备多态性,因为隐式static。

    九.继承类的析构应在基类之前,因为继承类的析构可能需要调用基类的方法,需要保证基类对象存活。

    十.当多个对象共享一个成员对象时,需要谨慎对待dispose,需要采用引用计数的方法(reference counting)来跟踪访问共享对象的对象数,在共享对象的dispose中判断refCount==0再进行真正的清理。

    十一. 在构造器中调用多态方法必须小心,因为继承类的成员尚未初始化完,此时产生的结果可能并不是所需,导致程序bug(C++在这方面表现得更合理)。因此,构造器编写原则:尽可能简单的使对象进入正常状态,如果有可能,不要调用类中其它方法(唯一能安全调用的是final方法(private也是final))。

    [1] [2] 下一页



     [java]黑马程序员    最简单的浏览器 (佚名,02-21)
    > 黑马程序员 最简单的浏览器  ---------------------- android培训、java培训、期待与您交流! ----------------------URL的全名叫做对统一资源定位符(Uniform  Resource Loc……

     [java]二、Java编程基础 (佚名,08-10)
    Body> 二、Java编程基础1.标识符    变量、类、方法的命名符号。    命名规则:[字母、_、$][字母、数字、_、$]*,不能和保留字重名,且大小写敏感。2.常量   ……

     [java]tomcat部署war出错的问题 (佚名,10-13)
    > tomcat部署war出错的问题 昨天我部署和测试我打的一个包,结果总是报错,错误信息如下:信息: Deploying web application archive zjmap.war2011-10-12 9:07:09 org.apache.catalina.core……

     [java]Java Listener 模式 (佚名,08-10)
    Body> 每种语言都有自己回调的方法,java也不例外.Java的回调是采用多态的方式来回调.比如: <!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHi……

     [java]Java 多线程 条件变量 (佚名,01-10)
    > Java 多线程 条件变量 Posted on 2011-01-09 15:09 喜糖 阅读(9) 评论(0) 编辑 收藏 <!-- 1 背景知识    在jdk1.5中引入了新特性:条件对象(c……

     


    ©2008 MyExt.cn
    本站文章来自互联网,仅供学习和研究使用,如有版权问题,请发送Email:myext@126.com.