• 内部类、匿名内部类、静态内部类


    一、内部类(内置类、嵌套类)

            1、内部类的访问规则:内部类可以直接访问外部类的成员,包括私有(private)。
        之所以内部类可以直接访问外部类的成员,是应为内部类中持有了一个外部类的引用:外部类名.this

            2、外部类要访问内部类就必须要建立内部类对象。

            3、其他类要访问内部类中的方法有两种方式:

              1)、当外部类能访问到内部类的时候,使用外部类的对象名进行访问。
              2)、new一个内部类的对象:外部类名.内部类名 x = new 外部类名().new 内部类名()

            4、内部类定义在外部类的成员位置上,就可以被成员修饰符所修饰:private、static、等。
              1)、被private修饰: 此内部类就只能被其外部类建立对象 和 访问(在外部类中进行了封装)。
              2)、被static修饰:就成为了静态内部类(下文详讲)。


    二、静态内部类(被static修饰)

            1、当内部类被static修饰后,就只能访问外部类中的静态成员了。

            2、其他类如何访问静态类:
              1)、当要访问静态类中的非静态成员时:new 外部类名.内部类名().内部方法名()
                            new  Outer.Inner().function()
              2)、当要访问静态类中的静态成员时 :外部类名.内部类名.内部方法名()
                            Outer.Inner.function()

          注意:当内部类中定义了静态(static )成员,那么 该内部类就必须是静态(static)的。
             当外部类中的静态(static)方法访问内部类时, 内部类也必须是静态(static )的。


    三、使用条件

             当我们要描述的事物内部还有事物的时候,该事物用内部类来形容。 因为该内部事物在使用外部事物的内容。

    四、当内部类定义在局部时

            1、因为不是在成员位置上,所以不能被成员修饰符所修饰(static、public等)
            2、还是可以直接访问外部类的成员,因为他还是持有外部类中的引用 : 外部类名.this
              但是他不能访问他所在局部的局部变量,但是可以被final修饰的局部变量。


    五、匿名内部类:

            1、匿名内部类其实就是内部类的简写格式。

            2、定义匿名内部类的前提:
          内部类必须是继承一个类,或者实现接口。 (内部类可以继承外部其它类或者实现外部的接口)
          (举例:人的类里有一个人的心脏的类,人的心脏类可以继承自一个动物的心脏的抽象类)

            3、直接new一个以其父类或者接口名() 加大括号 复写其方法 的 子类对象, 后面直接加 . 来调用其方法
                父类或者接口名(){复写的子类内容}.复写的方法
         (直接在每个调用方法中做这个定义并调用,每次定义只能实现一次性调用)

          总结:匿名内部类其实就是一个匿名的子类的对象。

            4、匿名内部类中的方法不要超过3个,否则阅读性会比较差。
          匿名内部类中最好只要复写父类方法,不要定义新的方法,此举一般无意义
          因为:如果要给匿名内部类命名,就只能命一个父类的名字,因为多态的原因,其不能调用子类方法(无法定义子类名)。

  • 相关阅读:
    【java Itext Pdf】itext pdf隔行换色 itext5添加表格背景颜色
    linux常用安装
    linux 定时执行shell脚本
    Linux crontab定时任务案例
    Oracle 常用的几个命令
    RS报表中根据变量比较大小来判断颜色
    如何利用TYPE 实现列转行
    Linux crontab概念
    关于下拉框联动选择的做法
    Oracle 启动常见的疑难
  • 原文地址:https://www.cnblogs.com/soficircle/p/6623947.html
Copyright © 2020-2023  润新知