• 二、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

  • 相关阅读:
    SmartTimer——一种基于STM32的轻量级时钟调度器
    Python2/3中的urllib库
    Python 解析构建数据大杂烩 -- csv、xml、json、excel
    Python2/3 中执行外部命令(Linux)和程序(exe) -- 子进程模块 subprocess
    Python 中的命令行参数处理 -- argparse、optparse、getopt
    Linux 定时循环执行 python 脚本
    Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode
    在windows下使用Qt5开发GTK3图形界面应用程序
    qt编译的基于xlib cairo的桌面程序
    debian安装dwm窗口管理器
  • 原文地址:https://www.cnblogs.com/sunNoI/p/9007455.html
Copyright © 2020-2023  润新知