温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

一文读懂Java中的局部内部类

发布时间:2020-11-07 17:16:51 来源:亿速云 阅读:189 作者:Leah 栏目:开发技术

这篇文章将为大家详细讲解有关一文读懂Java中的局部内部类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

局部内部类是什么?顾名思义,那就是定义在局部内部的类(逃)。开玩笑的,局部内部类就是定义在代码块、方法体内、作用域(使用花括号“{}”括起来的一段代码)内的类。局部内部类有以下特性:

  1. 局部内部类只能在代码代码块、方法体内和作用域中使用。
  2. 局部内部类同样可以无限制调用外部类的方法和属性。
  3. 可以使用abstract修饰,声明为抽象类。
     

  举个栗子:

public class Outer2 {
  public void print(){
    class Inner2{
      public void test(){
        System.out.println("Inner.print()");
      }
    }
    Inner2 inner2 = new Inner2();
    inner2.test();
  }
}
public class Test {
  public static void main(String[] args) {
    Outer2 outer2 = new Outer2();
    outer2.print();
  }
}

  这里的Inner2类仅仅在Outer2的print方法中被使用,有效范围也仅在print函数之内。

  通过这段玩具代码,可能无法理解为什么java中要出现这样限制这么多而且挺复杂的东西。让我们来看看之前的栗子:Java中的回调

  这里把代码复制过来:

public class TimePrinter implements ActionListener {
  @Override
  public void actionPerformed(ActionEvent e) {
    Date now = new Date();
    System.out.println("Time is " + now + " now.");
  }
}
public class Test {
  public static void main(String[] args) {
    ActionListener listener = new TimePrinter();
    Timer t = new Timer(1000,listener);
    t.start();
    JOptionPane.showMessageDialog(null,"Quit program?");//弹出对话框,防止主线程结束导致时钟结束
    System.exit(0);
  }
}

  在这里,我们想要创建一个Timer时,需要往里面传入一个实现了ActionListener接口的对象,而这个对象仅仅在该方法中使用了一次,这时候内部类的优势就体现出来了,把类封装在方法中,不向外界提供任何冗余信息:

public class Test {
  public static void main(String[] args) {
    class InnerTimePrinter implements ActionListener {
      @Override
      public void actionPerformed(ActionEvent e) {
        Date now = new Date();
        System.out.println("Time is " + now + " now.");
      }
    }
    ActionListener listener = new InnerTimePrinter();
    Timer t = new Timer(1000,listener);
    t.start();
    JOptionPane.showMessageDialog(null,"Quit?");
    System.exit(0);
  }
}

关于一文读懂Java中的局部内部类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI