内容思路来自Java编程思想,个人读书做的笔记,仅个人复习之用,故他人参考请自行辨别内容是否有错误。
在类的类部可以定义类,叫做内部类。如果这个内部类被static修饰,此时内部的类叫做嵌套类。
内部类用在哪里,解决了什么问题?
内部类中一定包含的有外部类的引用,即Outer.this,
故,创建内部类,必须拥有外部类的实例。
-
public class Outer { private String foo = "kitty"; class Inner{ Outer getOuter(){ // 在内部类中,可以通过dot this语法引用外部对象 // 即 Outer.this return Outer.this; } public void bar(){ // 内部类可以访问外部类的任意属性 System.out.println(foo); } } public static void main(String[] args) { // 同过外部类dot内部类的方式 声明一个引用 Outer.Inner inner = null; // 通过外部类实例dot new的方式创建一个内部类的实例 inner = new Outer().new Inner(); } }
-
嵌套类:看一种单例的写法。
-
public class Singleton { private static Singleton instance = null; private static class Inner{ static{ instance = new Singleton(); } } public static Singleton getInstance(){ return instance; } }
-
其实,单例其他的写法也有其他的
-
public class Singleton { private Singleton(){} private static class Inner{ private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance(){ return Inner.INSTANCE; } }
-
值得思考的是,为啥会有内部类?内部类的出现解决了啥问题?这一部分需要多读几次java编程思想。我还是对这个东西不清不楚。
20190903:
1. 内部类可以理所当然的访问外部类的成员变量,就好像内部类原本就拥有他们似的;
2. 内部类区别于嵌套类,嵌套类不依赖于外部类,可以单独被实例化,但是内部类的实例化必须有外部类的实例;
3. 内部类的实例化必须要有外部类的实例,通过外部类实例点new的方式创建内部类实例;
4. 内部类好像可以屏蔽一些细节,外面的类看不到这些细节。同时内部类实现一些接口我继承一些类从而具有一定的功能,通过这些功能完成对外部类的数据进行操作,
而且,内部类的这些功能,外面的内有看不到,这样可以避免一些特定的方法或实现被其他代码调用;
5.内部类中可以通过外部类点this表示外部类的this。入Outer.this,这就是对外部类的引用;
6.现在看来内部类就是为了操作外部类的数据而存在的吧,内部类封装了一些特定但是很私有的一些功能。
-