分享
 
 
 

TIJ阅读笔记(第八章)

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

8:接口(interface)与内部类(inner class)

接口(interface)

可以把它想象成“纯的”abstract类。能让开发人员定义类的形式:方法名,参数列表,返回值的类型,但是却没有方法的正文。interface也可以包含数据成员,但是它天生就是static和final的。interface只提供形式,不谈实现。

interface会被用作定义类之间的“协议(protocol)”。

当你implements一个interface的时候,你必须把这个interface的方法定义成public的。如果你不这么做,那它就会编程package权限的,这样经过继承,这些方法的访问权限就会收到限制,而这是Java的编译器所不允许的。

Java的“多重继承(multiple inheritance)”。

只要基类的设计里面可以不包括方法合成员变量的定义,你就应该优先使用interface。只有在不得不定义方法或成员变量的情况下,你才能把它改成abstract类,或者根据需要改成实体类。

合并接口时的名字冲突

用继承扩展interface

你可以用继承,往interface里面添加新的方法,也可以用继承把多个interface合并成一个新的interface。在这两种情况下,你所得到的都只是一个新的interface。

常量的分组

由于interface的数据成员自动就是static和final的,因此interface是一种非常方便的,创建一组常量值的工具。

interface的成员自动就是public的。

初始化接口中的数据成员

接口的嵌套

内部类

内部类与上传

实际上,将对象上传给它所实现的接口与将它上传给基类是完全相同。

普通类(非内部类)是不能被定义成private或protected的;它们只可能是public或package权限的。

在方法和作用域里的内部类

匿名内部类

如果你在定义匿名内部类的时候,还要用到外面的对象,那编译就会要求你把这个参数的reference生命成final的。如果你忘了,编译的时候就会报错。

实际上实力初始化过程就是匿名内部类的构造函数。当然,它的功能是有限的:你不能重载实例初始化,因此你只能有一个构造函数。

与宿主类的关系

如果你创建了一个内部类,那么这个内部类的对象,就与创建它的“宿主类的对象(enclosing object)”产生了某种关系,这样它就能访问宿主类对象的成员了--不需要任何特别的授权。此外,内部类还能访问宿主类的所有元素。

嵌套类

如果你不需要这种“内部类对象和宿主类对象之间的”联系,那么你可以把内部类定义成static的。这通常被称作“嵌套类(nested class)”。嵌套类的意思是:

1。无须宿主类的对象就能创建嵌套类的对象。

2。不能在嵌套类的对象里面访问非static的宿主类对象。

interface里面是不能有任何代码的,但嵌套类却可以是interface的一部分。

引用宿主类的对象

除非你还已经创建了宿主类的对象,否则根本不可能创建内部类的对象。但是,如果你创建的是嵌套类(static的内部类)的话,那就不需要宿主类对象的reference了。

在多层潜逃的类里向外访问

当你在另一个类里创建多层嵌套的内部类的对象的时候,应当使用哪种语法。“.new”语句指明了正确的作用域,因此你无须在调用构造函数的语句里再去限定类的名字了。

继承内部类

你必须传给他宿主类对象的reference。此外,你还必须在构造函数里面使用这种语法:

enclosingClassReference.super();

内部类可以被覆写吗?

当你继承宿主类的时候,内部类的戏法就到此为止了。这两个内部类是相互肚里的两个实体,它们都有自己的名字空间。

本地内部类(Local inner classes)

用本地内部类来代替匿名内部类的唯一正当的理由就是,你需要一个有名字的构造函数,并且/或者要重载这个构造函数,因为匿名内部类只能进行实力初始化。

选择本地内部类而不是匿名内部类的唯一原因就是,你必须创建多个那种类的对象。

内部类的标识符(Inner class identifiers)

为什么要有内部类?

每个内部类都可以独立地继承某个“实现(implementation)”。因此,内部类不会受“宿主类是否已经继承了别的实现”的约束。

有了内部类,你就得到了如下的附加特性:

1。内部类可以有多个实例,而每个又都可以有它自己的,与宿主类对象无关的状态信息。

2。一个宿主类里可以放上好几个内部类,他们可以用各自不同的方法来实现同一个interface或继承同一个类。

3。内部类对象创建的时机与宿主类对象的创建没什么关系。

4。内部类不存在什么让人头晕的“是”关系;他是一个独立的实体。

Closure与回调(Closures & Callbacks)

closure是一种能调用的对象,它记录了创建它的那个作用域的信息。内部类就是一种面向对象的closure,因为它不仅保存了宿主类的所有信息(“创建它的作用域”),而且还自动保存指向那个宿主类的对象的reference,更何况它还有权操控这个对象的所有成员,即使他们是private的。

内部类与控制框架(Inner classes & control frameworks)

“应用程序框架(application framework)”是一个或一组为解决某种特定类型的问题而设计的类。控制框架是应用程序框架的一种,主要用于响应时间;如果系统的首要人物就是对事件作出响应,那么它就被称为“事件驱动系统(event-driven system)”。

总结:相比绝大多数别的OOP语言,接口和内部类的概念会更为复杂,但是和C++的MI相比,JAVA的接口和内部类还是简单的许多。虽然,这些特性本身还是比较简单,但是它们具体用法就属于设计的范畴了,这点同多态性非常相似。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有