java 局部内部类常用么_详细分析Java内部类——局部内部类

今天介绍第二种内部类——局部内部类。

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

局部内部类只能在代码代码块、方法体内和作用域中使用。

局部内部类同样可以无限制调用外部类的方法和属性。

可以使用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);

}

}

你也许会觉得,这样好像只是把类简单的挪到了另一个类里面,并没有什么luan用。

表面上,确实如此,但事实上,还是有很多luan用的。

在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

我们都知道,java中是不能实现多继承的,接口也正是为了对多继承的补充完善给出的方案。而我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

据个人经验,局部内部类确实用的不多,但不常用不代表没有用,知道有这样一个神奇的内部类存在,了解过它的特性之后,可以为你日后的需求提供更多的方案。

至此,本篇讲解完毕,欢迎大家继续关注!

以上就是详细分析Java内部类——局部内部类的详细内容,更多关于Java 局部内部类的资料请关注脚本之家其它相关文章!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值