分享
 
 
 

java之旅(7)隐藏实现 & 复用类

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

隐藏实现 & 复用类

访问控制符, import, 每个编译单元(.java文件)只能有一个public类,如果还有其他类,那这些类就成为这个

public类的辅助类,这是因为他们都不是public的,因此对外边世界来说,它们都是看不到的。

编译.java文件的时候,它里面的每个类都会产生输出。其输出的文件名字就是.java里面类的名字,这样写不了

几个java文件就会产生一堆.class文件,但是不要奇怪,一个能正常工作的java文件本来就是由一堆.class文件

组成的,当然也可以用jar把他们封装成java Archive (JAR)文件。java解释器会负责寻找,装载和解释这些

文件的。

package和import就好像一个刀一个盾。是把一个单独的全局名字空间分割开来,这样不论internet上有多少人

再用java编程,你就都不会再碰到名字冲突的问题了。值得注意的是,每次创建package给它起名的时候,你也

隐含的设置了一个目录结构。这个package必须保存在由它的名字所指示的目录里,而这个目录又必须在classpath

下面。

java的访问控制符:public是众所周知的可以任何人都可以访问的;package权限,默认的访问权限没有关键词,

但通常还是把它成为package权限,(有时也成为friendly)它的意思是所有同属这个package的类都能访问这个

成员,由于同一编译单元只能同属一个package,因此同一个编译单元里的各个类,自动的可以进行相互访问。

protected, private.

接口(interface)和实现(implementation):

类只能是package和public的,如果你不希望别人访问这个类,你可以将他的构造函数设成private,这样除你之外,没人可以在创建那个类的对象了。而你则可以使用一个静态方法来创建对象。(这招在某些场合非常管用)

还有一个实现类似功能的方法,涉及到了设计模式。

复用类

要在不改动原有代码的前提下使用类。有两种方法:合成(compostion)和继承(inheritance)。

所有非primitive对象都有一个toString()方法,当编译器需要一个String而它却是一个对象的时候,编译器就会自动调用这个方法。所以当编译器从"source="+source中看到,你想把一个字符串同一个非字符串相加的时候,它就会说“由于String只能同String相加,因此我要调用source的toString(),因为只有这样才能把它转换成String!”。于是它就把这两个String连起来,然后再String的形式把结果返还给System.out.println()。如果你想让你写的类也具备这个功能,只要写一个toString( )方法就行了。

你可以为每个类都创建一个main(),而且这也是一种值得提倡的编程方法,因为这样一来,测试代码就能都放进类里了。即使程序包括了很多类,它也只会调用你在命令行下给出的那个类的main( )方法。(只要main( )是public 的就行了,至于类是不是public的,并不重要。)于是,当你输入javaDetergent的时候,它就会调用

Detergent.main()。虽然Cleanser不是public的,但是你也可以用javaCleanser来调用Cleanser.main()。这种往每个类里都放一个main()的做法,能让类的单元测试变得更容易一些。做完测试之后,你也不必移除main();留下它可以供以后的测试用。

关键词:super, extends

派生类的初始化是从基类的初始化开始的,如果都是默认的构造函数则不用处理任何问题,但若父类的构造函数是带参数的构造函数,则需要手动利用super来调用父类的构造函数。此外,对派生类构造函数而言,调用基类的构造函数应该是它做的第一件事。

在很多情况下,清理并不是什么问题;把它留给垃圾回收器就行了。但是如果你要自己做的话,那就只能辛苦一点了,而且还要格外小心,因为在垃圾回收方面,谁都帮不上你。垃圾回收器可能永远也不会启动。即便它启动了,你也没法控制它的回收顺序。最好不要依赖垃圾回收器去做任何与内存回收无关的事情。如果你要进行清理,一定要自己写清理方法

如果Java的基类里有一个被重载了好几次的方法,那么在派生类里重新定义那个方法,是不会把基类里定义的任何一个给遮盖掉的(这点同C++不同)。其实在派生类里用相同的参数列表,相同的返回类型来覆写方法的这种做法,实在是太普通了。

继承还是合成??一般来说,合成用于新类要使用旧类的功能,而不是其接口的场合。也就是说,把对象嵌进去,用它来实现新类的功能,但是用户看到的是新类的接口,而不是嵌进去的对象的接口。因此,你得在新类里嵌入

private的旧类对象。继承则是要对已有的类做一番改造,以此获得一个特殊版本。简而言之,你要将一个较为抽象的类改造成能适用于某些特定需求的类。稍微想一下就会知道,用vehicle(车辆)对象来合成一个car(轿车)是毫无意义的——car不包含vehicle,它本来就是vehicle。继承要表达的是一种“是(is-a)”关系,而合成表达要表达的是“有

(has-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- 王朝網路 版權所有