TIJ——Chapter Ten:Inner Classes
先提纲挈领地来个总结:
内部类(Inner Class)有四种:
- member inner class,即成员内部类。可以访问外部类所有方法与成员变量。生成成员内部类对象的方法:OuterClass.InnerClass inner = new OuterClass().new InnerClass();
- static inner class,即静态内部类。只能访问外部类的静态方法与静态成员变量,生成静态内部类对象的方法:OuterClass.InnerClass inner = new OuterClass.InnerClass();
- Local Inner Class,即局部内部类。定义在方法中,只能访问方法中声明的final 类型的变量(如果作为构造体参数,则不必是final)。
- Anonymous Inner Class,即匿名内部类。匿名内部类会隐式地继承一个父类或实现一个接口。
个人认为,内部类最常见的应用场景是:在方法中返回匿名内部类对象。
Remember the advice: Prefer classes to interfaces. If your design demands an interface, you'll know it. Otherwise, don't put it in ultil you are forced to.
- It's possible to place a class definition within another class definition. This is called an inner class.
- when you create an inner class, an object of that inner class has a link to the enclosing object that made it, and so it can access the members of that enclosing object--without any special qualifications. In addition, inner classes have access rights to all the elements(include private member) in the enclosing class. How can this happen? The inner class secretly captures a reference to the particular object of the enclosing class that was responsible for creating it. Then, when you refer to a member of the enclosing class, the reference is used to select that member. Fortunately, the compiler takes care of all these details for you.
- 在内部类中通过外部类名.this 可以拿到外部类对象的引用。
- 外部类对象.new 语法可以用于创建外部类的内部类对象。
- It's not possible to create an object of the inner class unless you already have an object of the outer class. This is because the object of the inner class is quietly connected to the object of the outer class that is was made from. However, if you make a nested class(a static inner class), then it doesn't need a reference to the out-class object.
- Normal(non-inner) classes cannot be made private or protected; they may only be given public or package access.
- Inner classes can be created within a method or even an arbitrary scope. There are two reasons for doing this: 1. You're implementing an interface of some kind so that you can create and return a reference. 2. You're solving a complicated problem and you want to create a class to aid in your solution, but you don't want it publicly available.
- Anonymous inner classes are somewhat limited compared to regular inheritance, because they can either extend a class or implement an interface, but not both. And if you do implement an interface, you can only implement one.
- To understand the meaning of static when applied to inner classes, you must remember that the object of an ordinary inner class implicitly keeps a reference to the object of the enclosing class that created it. This is not true, however, when you say an inner class is static. A static inner class means: 1. You don't need an outer-class object in order to create an object of a nested class. 2. You can't access a non-static outer-class object from an object of a static inner class.
- Ordinary inner classes cannot have static data, static fields, or static inner classes. However, static inner classes can have all of these.
- As you've see earlier, in an ordinary(non-static) inner class, the link to the outer-class object is achieved with a special this reference. A static inner class does not have a special this reference, which makes it analogous to a static method.
TIJ——Chapter Ten:Inner Classes的更多相关文章
- TIJ——Chapter Seven:Reusing Classes
Reusing Classes 有两种常用方式实现类的重用,组件(在新类中创建存在类的对象)和继承. Composition syntax Every non-primitive object has ...
- Journal entry of the eighth chapter to chapter ten
Chapter eight: 当我们做一个项目的时候,一开始可能会信息满满,或者说是通过一些调查分析后觉得自己的团队能完全实现用户所提出的所有要求,但是,往往在很自信的时候,我们都会处处碰壁,因为组内 ...
- TIJ——Chapter One:Introduction to Objects
///:~容我对这个系列美其名曰"读书笔记",其实shi在练习英文哈:-) Introduction to Objects Object-oriented programming( ...
- TIJ——Chapter Eleven:Holding Your Objects
Java Provides a number of ways to hold objects: An array associates numerical indexes to objects. It ...
- TIJ——Chapter Two:Everything Is an Object
If we spoke a different language, we would perceive a somewhat different world. Ludwig Wittgenstein( ...
- Chapter 3 Discovering Classes and Object
Chatper 3 Discovering Classes and Object Exercises: 1.What is a class? A class is a template for man ...
- TIJ——Chapter Fourteen:Type Information
Runtime type information(RTTI) allows you to discover and use type information while a program is ru ...
- TIJ——Chapter Twelve:Error Handling with Exception
Exception guidelines Use exceptions to: Handle problems at the appropriate level.(Avoid catching exc ...
- TIJ——Chapter Nine:Interfaces
A class containing abstract methods is called an abstract class. If a class Contains one of more abs ...
随机推荐
- KeyOnlyFilter(2)
主要用来过滤剩下行键计数一类 KeyOnlyFilter 官方API解释如下: A filter that will only return the key component of each KV ...
- 谷歌浏览器flash被禁用解决方法
谷歌浏览器访问设置:chrome://settings/content/flash 把要启动flash插件的网址添加进去
- 【python之路26】字符串之格式化%和format
Python基础之杂货铺 字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式, ...
- Django运行错误常见问题及解决方法1
如果不是在JetBrains PyCharm 2017.2里创建的想在JetBrains PyCharm 2017.2里运行.可以在 编辑结构 进行配置正常使用
- 【solr】schemaFactory配置相关schema.xml
schemaFactory配置相关schema.xml 关于schemaFactory的配置困扰我半天啦,下面来总结一下. 话说,好像是从5.0以后就已经没有schema.xml啦,这是由于Solr ...
- JSP-http和tomcat
一 Http 1.1 javaweb概述 1.2 http协议的概述 1.什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的 ...
- day38 05-Spring的BeanFactory与ApplicationContext区别
ApplicationContext怎么知道它是一个工厂呢? BeanFactory也可以做刚才那些事情,只不过ApplicationContext对它有扩展.ApplicationContext间接 ...
- notepad++ 退出后关闭所有文档(关闭“记住最后打开的文件”)
旧版本: 设置->首选项->其他->取消勾选Remember current session for next launch 新版本: 设置->首选项->备份->取 ...
- 问题解决:在js中绑定onclick事件为什么不加括号,在html代码中必须要加?(转载)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jquery源码学习(一)——jquery结构概述以及如何合适的暴露全局变量
jQuery 源码学习是对js的能力提升很有帮助的一个方法,废话不说,我们来开始学习啦 我们学习的源码是jquery-2.0.3已经不支持IE6,7,8了,因为可以少学很多hack和兼容的方法. jq ...