1 访问内部类的方法

OuterClassName ocn=new OuterClassName()

OuterClassName.InnerClassName in=ocn.new InnerClassName();

如果从外部类的非静态方法之外的任意位置创建内部类必须用以上方式

2 内部类可以访问其外围类中的所有成员,还拥有其外部类的所有元素的访问权,之所以这样是因为当用某一个外部类的对象创建一个内部类对象的时候,此时内部类对象就会捕获一个指向那个外围类对象的引用,那么当你访问外围类的成员的时候,就是用那个引用来选择外围类的成员的。

3 在内部类中生成外部类对象的引用需要用到OuterClassName.this,如果创建的是一个嵌套类(静态内部类),则不需要对外部类对象的引用

4 当一个内部类继承或者实现了一个接口或者抽象类或者普通类的时候,在使用new返回的时候会自动转为其基类或接口的引用了,且内部类作用域于它所定义的范围内。

5 匿名内部类的方式,在一个方法中直接new InnerClass{};此时同样会自动转型为其基类,它创建了一个继承名为InnerClass基类的匿名子类。在匿名类中,如果想引用外部定义的对象的时候,该对象必须定义为final类型,但是当对匿名内部类构造器传递参数的时候,此时就不必定义为final

Public Content getObject(int x)

{

  Returnnew Content(x){};

}

6 匿名内部类可以继承类,也可以实现类,但是就是不能同时兼备,并且只允许同时实现一个接口。

7 嵌套类,所谓的嵌套类其实就是静态内部类,也就是内部类前面加了static修饰符的。嵌套类和普通内部类的区别在于,普通内部类对象隐式的保存了一个引用,指向了创建它的外围类对象,而嵌套类创建的时候并不需要外部类的对象,同时它也只能访问外围类中的静态对象,普通内部类内部中不允许出现static修饰符的数据和字段,而嵌套类允许

8 可以在接口中定义内部类,不过此时该内部类就是一个publicstatic的嵌套类了。

9 内部类的好处,每个内部类都能独立的继承自一个接口的实现,它与外部类是否继承某个接口的实现无关,接口可以解决java中单继承的问题,而内部类可以有效的实现“多重继承”,意思就是当外部类需要继承多个非接口类型的时候,此时就可以利用内部类来实现一些继承操作。

10 内部类的继承,必须在继承中传递该内部类的外部类引用,在方法体中定义

outClassName.super(),当覆盖一个有内部类的外部类的时候,即使在子类创建重新定义此内部类,父类与子类的内部类依然是独立的,各自在自己外部类的命名空间中。

11 局部内部类,一般就是在方法体中定义一个局部内部类,此时该内部类不能有任何访问修饰符,因为它的作用域仅仅在于该方法体内部。但是它可以访问当前代码块内的常量和此外围类的所有成员。