CND8首页 - 软件下载 - 驱动下载 - 新闻资讯 - 软件学院 - 广告联系 - 设为首页 - 加入收藏
软件 | 软件分类 | 网络工具 | 系统工具 | 多媒体类 | 图形图像 | 应用软件 | 行业软件 | 教育教学 | 安全相关 | 编程开发 | 源码下载 | 电子书库 | 游戏娱乐 | 发布软件
驱动 | 硬件驱动 | PC机驱动 | 本本驱动 | 数码驱动 | 手机软件 | 办公驱动 | 硬件工具 | 新闻中心 | 软件资讯 | 硬件资讯 | 业界新闻 | 软件应用 | 安全相关 | 游戏娱乐
学院 | 操作系统 | 办公软件 | 聊天软件 | 图形图像 | 多 媒 体 | 程序开发 | 网页设计 | 网络编程 | 数 据 库 | QQ 专区 | Photoshop专区 | WindowsXP专区 | ASP PHP JSP
学院首页 | 操作系统 | 办公软件 | 聊天软件 | 图形图像 | 多 媒 体 | 程序开发 | 网页设计 | 网络编程 | 数 据 库
搜索:  热门搜索:QQ MSN Skype PhotoShop Flash 3DMax WindowsXP WindowsVista ASP PHP JSP VB
您的位置:首页 -> Java教程 -> 《Java编程思想》(第二版)第08章:接口与内隐类

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

CND8学院 Java教程 发布日期:2008年07月09日



  我的笔记
  
  
  
  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教程


 分类导航
操作系统 | Windows2000 | WindowsXP | Vista | Windows7
办公软件 | Office | Word | Excel | PowerPoint | Access
聊天软件 | QQ | MSN | Skype
图形图像 | PhotoShop | FireWorks | CorelDraw | AutoCad
     | Illustrator
多 媒 体 | Flash | 3DMax | Maya | Authorware
程序开发 | VB | VC | Java | C/C++ | Delphi
网页设计 | Dreamweaver | FireWorks | HTML | Javascript
     | CSS
网络编程 | ASP | PHP | JSP | .NET | Ajax | XML
数 据 库 | Access | MySQL | SQL Server | Oracle
CND8首页 | 软件分类 | 驱动下载 | 资讯中心 | 软件学院 | 网站地图 | 下载帮助 | 本站声明 | 发布软件 | 广告联系 | 设为首页 | 加入收藏
Copyright © 2003-2010 CND8.com 版权所有 中国下载吧 ,联系QQ:289740304
苏ICP备05005485号