二、Java面向对象(17)_内部类

2018-05-07

 

内部类

 

可以在一个类的内部定义另一个类。

为什么使用内部类?

  1)增强封装,把内部类隐藏在外部类之中,不允许其他类访问内部类。

  2)内部类能提高代码的可读性和可维护性,把小型类嵌入到内部类中,结构可以更靠近。

  3)内部类可以直接访问外部类成员

 

内部类根据不同的修饰符或者定位的位置不同,分成四种:

   1)实例内部类:内部类没有使用static修饰。

   2)静态内部类:内部类使用了static修饰。

   3)局部内部类:在方法中定义的内部类。

   4)匿名内部类:适合于仅使用一次的内部类,属于局部内部类的特殊情况。

 内部类可以看作是外部类的一个成员,好比字段。那么内部类可以使用public、缺省、protected、private修饰,还可以用final修饰。

------------------------------------------------------------------------------------------------------------------------

一、实例内部类

  没有使用static修饰的内部类,说明内部类属于外部类的对象,不属于外部类本身。

  特点:

  1、创建实例(对象)内部类之前,必须存在外部类对象创建内部类对象。(当存在内部类对象时,一定存在外部类对象)

  2、实例内部类自动持有外部类的实例(对象)的引用,内部类可以直接访问外部类成员。

  3、外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问。

  4、实例内部类中不能定义静态成员,只能定义实例成员。

  5、如果外部类和实例内部类存在同名的字段和方法abc,那么在内部类中this.abc表示访问内部类成员。

 

二、静态内部类

  使用static修饰的内部类

  特点:

  1、静态内部类的实例不会自动持有外部类的实例的引用。在创建内部类实例时不必创建外部类的实例

  2、静态内部类可以直接访问外部类静态成员,如果访问外部类实例成员,必须通过外部类的实例(对象)去访问。

  3、在静态内部类中可以定义静态成员和实例成员。

  4、测试类可以通过完整的类名直接访问静态内部类的静态成员。

 

三、局部内部类

  在方法中定义的内部类,其可见范围是当前方法和局部变量是容一个级别。

  1、不能使用public、protect、private、static修饰符。

  2、局部内部类只能在当前方法中使用。

  3、局部内部类和实例内部类一样,不能包含静态成员。

  4、局部内部类和实例内部类一样,可以访问外部类的所有成员。

  5、局部内部类访问的局部变量必须使用final修饰(在Java8中是自动隐式加上final,但是依然是常量,不能改变值)

四、匿名内部类

  参考:https://blog.csdn.net/chenssy/article/details/13170015

原文地址:https://www.cnblogs.com/sunNoI/p/9007455.html