网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Resin全攻略.
.Comment 语句.
.什么时候在EJB系统中使用XML.
.非常有用的操作Internet的API函数.
.用Validator简化Struts的开发过程.
.关于EJB调用原理分析.
.Java编译、反编译、反反编译.
.如何实例化一个抽象类?.
.Java初学者应该搞懂的六个问题.
.一个Socket服务的例子! 请高手指.
.java编码中的一些经验和教训.
.java版winzip总结之一:菜单快捷.
.谈谈各种JAVA中的调用程序方式.
.玩转Java的CLASSPATH(三)JWhic.
.EJB的Session Bean编程规则.
.java迈步从头越(java环境配置).
.利用Java实现zip压缩/解压缩.
.了解J2ME在实际开发中的可选包MM.
.深入掌握Java技术 EJB调用原理分.
.Java程序设计基础之异常处理.

java学习笔记7--Polymorphism

发表日期:2008-1-5



  Polymorphism
多态(polymorphism)也被称为动态绑定『dynamic binding』、后绑定『late binding』或运行时绑定『run-time bingding』。
它的意思是要在程序运行的时候,根据对象的类型来决定该绑定哪个方法。多态性是继数据抽象和继续之后的,面向对象的编程语言的第三个基本特性。

绑定(binding): 将方法的调用连到方法本身
前绑定(early binding): 当绑定发生在程序运行之前时(就是由编译器或连接器负责)
后绑定(late binding): 在程序运行的时候,根据对象的类型来决定该绑定哪个方法。

“封装”(encapsulation)通过将数据的特征(characteristics)与行为(behavior)结合在一起,创建了一种新的数据类型。
“隐藏实现”(Implementation hiding)通过将细节设成private,完成了接口与实现的分离。
“多态性”是站在“class”的角度来处理这种逻辑上的分离的。


--------------------------------------------------------------------------------



Shape s = new Circle(); //upcasting: 将Circle对象upcast为Shape类型
s.draw();

Upcast(上传)就是把对象的reference 当作基类的reference 来用.(注:Java内部是知道对象属于什么类型的)
因为Derived class is a type of base class, 所以基类的reference (Shape s)能接受派生类(circle)的对象

upcast以后,基类reference 调用的都是基类自己的method (late binding),
除非这个method是late-bound的,也就是派生类覆写(override)了这个method, 才会根据对象类型选择相应的method(多态性).

以上面的代码为例:s是Shape类型的reference, 除非draw()是一个动态绑定的method(派生类circle覆写了这个draw()),
s.draw()才会调用cicle的draw(), 否则调用的都是基类Shape自己的method

private和final的method都会采用early-binding, 因为他们是不能被override的。(注:private 方法自动就是final 的)

建议别用基类的private method的名字去命名派生类的method。因为这样会让人误以为会override这个method,
实际上private自动就是final的,不能被override。


--------------------------------------------------------------------------------

override(覆写) 表示在派生类里写一个"同样"的method。 就是重新写一遍这个method
(注:1."同样"表示:同名且参数列表和返回值也相同。 2.method必须是非final, 非private的(private 方法自动就是final 的) )
overload:除了"同样"的method(即override) 以外的同名method.


--------------------------------------------------------------------------------


当你想要通过一个公共的接口来操控一组类的时候,就可以使用抽象类了。通过动态绑定机制,那些符合方法特征的派生类方法将会得到调用。
abstract class {}
抽象类的方法可以使abstract的,也可以是非abstract。派生类继续了一个abstract类,那他要么实现所有的abstract的method,要么把自己也变成abstract的。


--------------------------------------------------------------------------------



//: c07:PolyConstrUCtors.java
// Constructors and polymorphism
// don't produce what you might eXPect.
import com.bruceeckel.simpletest.*;
abstract class Glyph {
abstract void draw();
Glyph() {
System.out.println("Glyph() before draw()");
draw();//假如你new一个派生类对象,并且在基类构造函数里面调用了动态绑定的方法,
//那么它会使用那个派生类覆写后的版本。
上一篇:java学习笔记--Hiding implementation 人气:521
下一篇:Java学习过程应该深入理解的一些重点 人气:496
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐