您的位置:首页 > 编程语言 > Java开发

java学习笔记之内部类

2015-09-17 17:13 344 查看
内部类的作用:

-内部类提供了更好的封装,只能让外部类直接访问,不允许同一个包中的其他类直接访问。

-内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员,但外部类不能访问内部类的内部属性。

内部类的使用场合:

由于内部类提供了封号的封装特性,并且可以很方便的访问外部类的属性。所以,通常内部类在只为所在外部类提供服务的情况下优先使用。

内部类的分类:

⎧⎩⎨⎪⎪⎪⎪⎪⎪成员内部类匿名内部类局部内部类(用的很少){非静态成员内部类静态成员内部类\begin{cases}
成员内部类 &
{\begin{cases}
非静态成员内部类\\
静态成员内部类\\
\end{cases}}
\\
匿名内部类\\
局部内部类(用的很少)
\end{cases}

a、非静态内部类

-必须寄存一个外部类对象里,因此,如果有一个非静态内部类对象那么一定存在一个对应的外部类对象。

-非静态内部类不能有静态方法、静态属性、静态代码块,只能有静态常量变量。

因为假设可以有静态方法的话,就可以在内部类定义一个自己的引用,外部直接调用,就不用创建外部类了,这与“必须寄存在一个外部类对象里”的设计初衷相违背,所以不允许,如果非要定义的话,直接将内部类定义成静态的就可以了。


-静态内部类可以看成是外部类的一个普通成员。

b、静态内部类

-当一个静态内部类存在,不一定存在对应的外部类对象。

-静态内部类的实例方法不能访问外部类的实例方法。

-静态内部类看成是外部类的一个静态成员。

c、局部内部类

-相当于方法中的局部变量。

-不能用修饰符,跟局部变量一样,如public、protected、private、transient、static等。

-不能定义静态变量、静态方法。

-只在方法内部可见,不能使用方法中的局部变量,除非是常量。

因为局部变量与类对象的生命周期有可能不一致。


d、匿名内部类

-有三种方式:

-继承式
-接口式
-参数式


-匿名内部类根据声明的位置,判断其实成员内部类还是方法内部类(局部内部类),如果是成员内部类要遵循成员内部类的语法,如果是方法内部类要遵循方法内部类的语法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: