zoukankan      html  css  js  c++  java
  • 二、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

  • 相关阅读:
    Centos设置时区和时间同步
    CentOS 安装 Docker
    Docker部署RabbitMq
    Docker部署MinIO对象存储服务
    Docker配置阿里云镜像加速
    IDEA集成Docker部署项目容器
    VMware配置静态ip
    Vue 报错 "TypeError: Cannot read property 'name' of undefined"
    持续交付-发布可靠软件的系统方法
    软件测试总结
  • 原文地址:https://www.cnblogs.com/sunNoI/p/9007455.html
Copyright © 2011-2022 走看看