zoukankan      html  css  js  c++  java
  • Java内部类

    1.定义

     内部类即定义在一个类体内部的类,内部类被编译器编译成OuterClass$InnerClass.class 。

    class OuterClass
    {
       private int value;
       
       private class InnerClass
       {
         
       }
    }

    2.特性

    (1)内部类可以访问外部类的属性和方法,包括private的属性和方法。

    (2)内部类可以使用static关键字修饰,可以使用OuterClass.InnerClass来访问static的内部类。static的内部类只能访问外部类的static属性和方法。

    (3)通常是在外部类中创建内部类对象使用内部类,要在其他类中创建内部类对象:

         如果内部类是非static的,则需要通过一个外部类对象来创建内部类对象,如:OuterClass.InnerClass innerObj = outerObj.new InnerClass;

         如果内部类是static的,则需要通过OuterClass.InnerClass来创建内部类对象,不能再通过一个外部类对象来创建,如:OuterClass.InnerClass  innerObj = new OuterClass.InnerClass 。

    3. 局部内部类

      如果一个内部类只在某个方法中使用了,则可以将这个内部类定义在该方法中,即局部内部类。局部内部类不能使用public或者private修饰。

      局部内部类除了能访问外部类的属性和方法,还能访问所在方法中的局部变量,但这些变量必须是final的。

    class OuterClass
    {
       private int value;
       
       public void method()
       {
          class LocalClass
          {
               
          }
       }
    }

    4. 匿名内部类

     匿名内部类在局部内部类的基础上更加简化了,假如在定义局部内部类的方法中只创建该局部内部类的一个对象,则就不再需要给该局部内部类命名。匿名内部类一般和接口结合在一起使用:

    class OuterClass
    {
        public void  method() 
       {
           new ActionListener() {                  //该匿名类实现了ActionListener接口
               
    public void actionPerformed(ActionEvent e)
    {
    }
    }; } }

    5. 用处

     (1)内部类可以对同一个包中的其他类隐藏起来

     (2)当想要定义一个回调函数而又希望尽量少写代码时,可以使用匿名内部类。Java中的回调是通过对象实现的,传递一个对象的引用,然后在适当的时候调用对象中的某个方法实现回调函数的功能。

    参考资料 《Java核心技术》

  • 相关阅读:
    java实现 n人过桥问题
    git:rebase的原理
    注解@ConfigurationProperties使用方法
    docker+mysql 更改配置后重启不了的解决方案
    docker+mysql 构建数据库的主从复制
    Linux 踩坑记
    OSS上传图片无法在线预览的解决方案
    Linux中du、df显示不一致问题
    zookeeper作配置中心(存储支付信息)
    @Configuration结合@Bean实现对象的配置
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4665308.html
Copyright © 2011-2022 走看看