java 内部类(自己的一些理解)

http://blog.sina.com.cn/s/blog_8dd685f5010124g5.html

————————————————————————————————————————————————————

注意!~ 

内部类相同于 外部类的一个属性  和 外部类的其他属性 是同级的 只不过访问的方式不同 (内部类私有的方法肯定也能被外部类访问)

内部类可以访问外部类的任意变量和方法(除了静态内部类)。

静态方法里面 只能访问 静态变量和静态方法 定义在自己方法里面的局部变量

内部类中只有静态内部类才能定义 静态成员(静态变量和静态方法).

成员内部类


里面只能定义非静态的变量和方法(非静态的 也就是不带关键字static 的变量)

有外部类的引用 外部类名.this 引用

成员内部类里面不能定义静态内部类

静态内部类


里面定义 静态的变量和方法 非静态的变量和方法

只能访问外部类静态的变量和方法

没有外部类的引用


匿名内部类


经常用来 作为某个类的唯一子类或者 某个接口的唯一实现类(如果要继承的父类 只有有参的构建函数 那么就必须要用super关键字 调用它有参数的构建函数 要不报错)


局部内部类

在外部类方法体中定义的类叫局部内部类,局部内部类能只用 默认修饰符和 final修饰符修饰 abstract修饰符,访问方法的局部变量时,方法的局部变量带final 才能被访问。


内部类总结:


1.首先,把内部类作为外部类的一个特殊的成员来看待,因此它有类成员的封闭等级:private ,protected,默认(friendly),public
                                                      

它有类成员的修饰符:   static,final,abstract

2.非静态内部类nested inner class,内部类隐含有一个外部类的指针this,因此,它可以访问外部类的一切资源(当然包括private)
 
外部类访问内部类的成员,先要取得内部类的对象,并且取决于内部类成员的封装等级。
 
非静态内部类不能包含任何static成员.

3.静态内部类:static inner class,不再包含外部类的this指针,并且在外部类装载时初始化.静态内部类能包含static或非static成员.
 
静态内部类只能访问外部类static成员.
 
外部类访问静态内部类的成员,循一般类法规。对于static成员,用类名.成员即可访问,对于非static成员,只能用对象.成员进行访问

类成员有两种static , non-static,同样内部类也有这两种

non-static 内部类的实例,必须在外部类的方法中创建或通过外部类的实例来创建(OuterClassInstanceName.new innerClassName(ConstructorParameter)),并且可直接访问外部类的信息,

外部类对象可通过OuterClassName.this来引用

static 内部类的实例, 直接创建即可,没有对外部类实例的引用。

内部类不管static还是non-static都有对外部类的引用(不然的话 无法调用外部类的变量和方法)

non-static 内部类不允许有static成员

方法中的内部类只允许访问方法中的final局部变量和方法的final参数列表,外部类中的方法和变量也可以被访问。方法中的内部类不能在方法以外访问.

匿名内部类如果继承自接口,必须实现指定接口的方法. 匿名内部类如果继承某类,调用的构建函数要根据情况用无参还是有参的构建函数。
——————————————————————————————————
傲轩游戏网
原文地址:https://www.cnblogs.com/cuizhf/p/3058561.html