分享
 
 
 

《Java编程思想》(第二版)第6:重复运用classes

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

我的笔记

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(),该怎么写?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有