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

  • 相关阅读:
    mysql迁移达梦数据库varchar长度问题
    处理器 i3 i5 i7 i9 区别,以及K F 区别
    mybatis配置文件,Mapper标签下以package包扫描形式时需要Mapper.xml文件名称和mapper接口名称一致
    add、commit、push、pull 、merge 的区别与作用
    testng 接口测试,读取Excel表格数据中json数据,做数据驱动
    windows 系统查看端口与进程,查看某个具体的端口所占用的进程号,杀掉进程
    码云gitee删除仓库
    java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
    maven+mybatis+spring 项目整合log4j,实现控制台打印SQL语句
    将idea 中 代码提交至码云
  • 原文地址:https://www.cnblogs.com/sunNoI/p/9007455.html
Copyright © 2020-2023  润新知