网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  《java编程思想》(第二版)第6:重复运用classes     
  文章作者:未知  文章来源:水木森林  
  查看:63次  录入:管理员--2007-11-17  
 
  我的笔记
java有着众人赞叹的功能,程序代码的重复运用便是其中之一.但是,如果想获得革命性的改变,你得远远超越"复制程序代码,然后改变之"的旧式程序代码的复用途径:组合(composition)和继承(inheritance)

tostring():每个非基本类别的对象都具备tostring(),当编译器希望的到一个string,而你手上却只有那些对象的情况下,这个函数便会被唤起.

测试tips:"为每个class提供main(),不管class是不是public",可以在命令行启动各个main().这样可以使每个class单元测试更为容易.而且在完成单元测试之后,无须删除main();你可以将它留下以待日后再加测试.

super关键字:你可能会在derived class 的函数中(比如是a())调用base class中的某个函数(通常也是a()),这个时候你当然不能直接调用,因为相同的标志符会造成递归.为了解决这个问题,提供了关键字super。他代表超类(superclass),所以你可以如此调用:super.a();

base class的初始化:调用base class构造函数。java编译器会自动在derived class构造函数中插入对base class默认构造函数的调用动作。但如果你的class不具备default构造函数,或者你想调用带有引数的base class构造函数,你便得运用关键字super,并搭配适当的引数列,明白的写出调用动作,比如说super(i);(注意这和调用一般成员函数的语法有所不同哦)。此外,对base class构造函数的调用,必须是derived class构造函数所做的第一件事(如果你做错了,编译器会提醒你)。

捕捉base构造函数的异常:上面的那个"第一件事"的限制也使得derived class构造函数无法捕捉所有来自base class的异常。有时候这听不方便的。

保持适当的清理:由于java中不存在析构函数但是有时候我们希望在对象毁灭的时候做些清理动作,这个时候要把代码放到final块中

名称遮蔽(name hiding):函数不论被定义与某层class或其base class,java重载(overloading)机制都可以正常运作。当然,使用"和base class一模一样的标记(signature)及返回类别"来复写(override)同名函数,使在寻常不过的事情了,这个也使多态的基础。关键字final:基本意思是"这是不能被改变的"。基于设计和效率我们可能希望阻止改变。这两个理由十分不同,可能够造成对关键字final的误用。可以使用final的三个地方:data,method,class。

final data:用来告诉编译器某块数据是"固定不变的".用处如下:1.使用不改变的"编译器常量(compile-time constant)".2.可以在执行期(run-time)被初始化,而你却不想在改变它。如果某一数据及时static也是final,他们它拥有一块无法改变的存储空间。blank finals:java允许产生"留白的finals",即允许我们将数据成员申明为final同时可以不给初值,任何情况下,blank finals必须在使用之前进行初始化,编译器会强制保证。不过blank finals比final提供了更多的弹性。因为如此class内的final数据成员便可以在每个对象中有所不同。final arguments:将引数申明为final,意味着你无法在此函数中令该引数(一个reference)改指他处。当基本类型引数申明为final时,表示你可以读取引数所代表的值,但无法改变该值。

final method:使用它的原因有二:1.锁住这个函数,保证不被derived class 复写(override),这是种设计上的考虑。2.允许编译器(但此动作不一定产生,编译器此时会有个判断动作)将所有对此函数的调用动作转化为inline(内联)调用。这是种效率上的考虑。由于以上两点同时会起作用,所有有时候你必须权衡一下值不值得用final method:比如说某个函数很小你想把它转化为内联函数但是此时它会完全失去被override的可能性。所以最好是在某个函数镇的体积很小或者你真的不希望他被复写时,才将他申明为final。class中的所有private函数自然而然的会是final,因为他们无法被别类取用,更无法被复写。这说明了一点很重要的性质:覆写(overriding)只能够发生在"函数属于base class接口"时。

final classes:原因是你不希望它被继承(要么你是处于保密性考虑要么你是出于设计上的考虑)请注意,不论class是否为final,数据成员data都可以或者为final,或者不为final.但final class 中的所有函数也都自然是final的了,因为他们不可能被覆写。
我的问题
当base类中有 protected f(),我在derived class 中定义了 public f() 或者 private f()是算overloading 还是 overriding?

c继承自b,b继承自a,我要在c的某个函数中调用a中的函数a(),该怎么写?
 
 
上一篇: 《java编程思想》(第二版)第5章:隐藏实现细节    下一篇: 《java编程思想》(第二版)第6章:重复运用classes
  相关文档
java套接字编程(下) 11-17
比较java的两个设备访问api 11-17
java中的异常处理从概念到实例 11-17
各种数字类型转换成字符串型--java 11-17
配置eclpise+tomcat实现jsp编写与部署 11-16
使用java编写nt服务程序 11-17
数据库:我来谈谈easydbo的持久化策略 01-22
程序安装,升级及卸载核心部分(java编写) 11-17
赋值运算符 11-17
java智能卡基础篇 11-17
delete 方法 11-16
java没有“sizeof” 11-17
spring framework中的aop之around通知 11-16
java设计模式之visitor 11-17
java入门--系统java基础知识部分总结 01-11
java初学者问道:java ide选择 11-17
驯服tiger(j2se5.0)之集合框架 11-16
rational rose介绍材料 11-17
最新sun授权国内考试中心一览表 11-17
用eclipse进行xml开发 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息