网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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,移动开发
本月文章推荐
.Sun决定6月份发布为iPhone开发Ja.
.基础篇:条件控制.
.一个实现长整型数相加减的小程序.
.用内嵌类减少JAVA程序设计中的混.
.通过三种方式对Struts框架进行扩.
.基于MVC设计模式的WEB应用框架研.
.对JAVA安全性的讨论.
.Java:嵌入网络的核心.
.Microsoft .NET的优势与劣势.
.使用 Jakarta Commons 之库组件攻.
.Struts1.0学习文档-初学者入门.
.发挥J2EE的优势,管理J2EE的世界.
.初学Java注意什么?.
.使用JDOM和XPATH结合查询.
.一些面向对象的设计法则(4).
.struts+spring+ibatis轻量级J2EE.
.JBuilder2005 Servlet开发之开发.
.JAVA专业术语集.
.JDBC2.0扩展API(3).
.Java算术运算符.

《Java编程思想》(第二版)第08章:接口与内隐类

发表日期:2008-1-5



我的笔记



Interfaces&inner classes为你的系统中的对象提供更为精巧的组织与控制方式.

interface更胜于abstract class,因为我们能够藉以撰写出"可以upcasting为多个base class"的class,从而达到C++多重继续的目的.

你可以在要害字interface之前加上要害字public(但只有当这个interface被定义与同名文件中才行),否则就成为"friendly",仅可被使用于同一个package之内.interface之内的所有methods都会被默认为public.由于interface不带任何实现细目,也就是说interface不与任何存储空间有关联,因此合并多个interface是一件轻而易举的工作,编译器不需如临大敌.所以在合并多个接口时,C++所面临的问题不会出现于Java之中.显然我们应该尽量考虑使用interface而不是abstract class.

产生常量群(grouping constants)由于interface中的所有数据成员都会自动成为static和final,所以对于常量群的产生(就如C或C++中的enum一样),interface是个十分便利的工具.interface中的数据成员会自动成为public,所以无需明白标出.

接口合并时的名称冲突(name collision)问题:当你实现多重接口是,可能会掉进一个小小的陷阱.overriding ,implementation,overloading统统令人不愉快的混砸在一起.而且重载method无法仅靠return type作为区别.所以此时你要非凡小心。

嵌套的(nesting) interfaces:除了实现private interface这个东东,真的还有用吗?书上说:"或许加入这些特性的最初理由只是为了语法上的一致性,但我总认为,你知道语言的某个特性之后,往往能够找到这个特性的用处。"

Inner Classes(内隐类)从设计上来说:inner class的主要目的不应是隐藏,因为Java已经具备了极佳的隐藏机制-friendly class。但是当你开始upcasting至base class 尤其是转型为interface时,就能突显inner class的好处:(tip:从某个"实现出interface I"的inner class对象身上产生一个reference 指向I,本质上和"向上转型至base class"是一样的),这是因为inner class(也就是I的实现者)可以在接下来的情境中完全不被看见,而且不为任何人所用。这么一来我们就可以很方便的"隐藏实现细目"。你所得到的只是"指向base class或interface"的一个reference而已。注重这里Inner Classes可以具有一般的(non-inner) class无法具有的性质:比如可以拥有private 和protected访问修饰符。当申明为private时,表示仅供outer class访问,当申明为protected时,表示可以被package内的任何class或者outer class的继续者所使用。

位于methods和scopes之内的inner classes怕怕~,上面提到的是inner class最正常的用法,假如你需要,他还提供了一些隐晦的使用方法:你可以将inner classes至于函数之内或甚至至于任意程序范畴(scopes)之内...你真的需要嘛?晕倒。

匿名(anonymous) inner classes time time again,i ask you :真的需要吗?多写点代码会死啊!

与外围(outer) class的连接关系inner class还有一个显然的好处就是他可以访问外围对象的所有成员而无需添加任何修饰词。此外inner classes亦能访问enclosing class的所有元素(这点与C++大不相同)。这是因为任何inner class被产生的

时候,必须给它记录一个reference,指向enclosing class的某个特定对象(比如说outer class),假如编译器找不到这个ref,就等着报错把。

static inner classes(静态内隐类)和上面的inner class相反,假如你不需要这个ref,那就static之吧!这意味着:1.产生其对象时,并不需要同时存在一个enclosing class对象.2.你无法在static inner class对象中访问enclosing class对象成员实际上,从另一个角度来看,还存在第3点不同:3.可以拥有static data,static fields,static inner class.然而non-static inner class不行.由此我们可以发现static inner class 和static method相似了.4.可以把static inner class 放在interface里面--static inner class只不过是被置于interface的命名空间中罢了,利用这个性质,可以把main()放到某个接口中,用以支持测试...

取用(referring) outer class 的对象[outer class name].this.xxx假如你想在outer class里面的static函数里面直接产生inner class对象,需要先搞定一个outer class的ref p,然后p.new [inner class name].因为我们说过inner class产生的时候必须要有一个outer class ref传过来,否则会被认为错误.当然对于static inner class 就不用了.

从多层嵌套class向外伸展触角无论inner class被嵌套的层次有多深.其所有outer classes的成员都可被它访问(考虑NameSpace).

继续inner classes:先吐血3升,真的有必要吗?难点在于那个神秘的ref必须被初始化.但derived class之内不存有可连接的缺省对象.所以需要专用语法支持:enclosingClassReference.super();

inner classes 可被复写吗?总算不用研究了:作者已经说明了,记住结果就可以:"其实没有什么用处."

inner class 标志符 (identifiers) : $

总结:为什么需要inner classes?1.由inner class实现interface能提供outer class实现interface所不具备的功能:你可以下探实现细目.inner class不受限于outer class是否已继续自某一实现类.也就是说,inner classes实习上由于你继续多个non-interface.2.Closures(终结)和Callbacks(回调)3.Control frameworks



我的问题


文中提到的把含有main()的static inner class 放到interface中用于测试较之以前的继续main()有何优点?


文中提到的把含有main()的static inner class 放到interface中用于测试较之以前的继续main()有何优点?



文中提到的把含有main()的static inner class 放到interface中用于测试较之以前的继续main()有何优点?

原来protected>=friendly?我土了。
上一篇:《Java 手机/PDA 程序设计入门》读书笔记3--LCDAUI高级API之List 人气:478
下一篇:《Java编程思想》(第二版)第07章:多态(polymorphism) 人气:510
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐