有这样一种内部类,它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

匿名内部类,任意作用域中嵌入的内部类都属于局部内部类的范畴。

<局部内部类>

 interface Destination {
String readLabel();
} class Test003Sub { public Destination destination(String s) {
class Test003Inner1 implements Destination {
private String s; private Test003Inner1(String s) {
this.s = s;
} @Override
public String readLabel() {
return s;
}
}
return new Test003Inner1(s);
}
} public class Test003 {
public static void main(String[] args) {
Test003Sub test003 = new Test003Sub();
System.out.println(test003.destination("Hello World").readLabel());// Hello World
}
}

<匿名内部类>

上例也可以改成匿名内部类。在匿名类内部使用的参数推荐加final。

 interface Destination {
String readLabel();
} class Test003Sub {
public Destination destination(final String s) {
return new Destination() {
private String sin = s; @Override
public String readLabel() {
return sin;
}
};
}
} public class Test003 {
public static void main(String[] args) {
Test003Sub test003 = new Test003Sub();
System.out.println(test003.destination("Hello World").readLabel());// Hello World
}
}

<任意作用域中嵌入的内部类>

内部类还可以嵌入到方法的任意作用域中。代码中内部类嵌入if内,并不是说该类创建是有条件的,它与其他类一样是一起编译过的。

 class Test004Sub {
String internalTracking(boolean b) {
String s = "";
if (b) {
class TrackingSlip {
private String s; private TrackingSlip(String s) {
this.s = s;
} String getSlip() {
return s;
}
}
TrackingSlip ts = new TrackingSlip("Hello World!");
s = ts.getSlip();
} else {
s = "No Data!";
}
return s;
}
} public class Test004 {
public static void main(String[] args) {
Test004Sub test004 = new Test004Sub();
System.out.println(test004.internalTracking(true)); // Hello World!
System.out.println(test004.internalTracking(false)); // No Data!
}
}

最新文章

  1. AnimatedModal.js – CSS3 全屏模态窗口
  2. Excel 数据关联
  3. Moon.Orm 5.0(MQL版)分页功能的设计(求指教,邀请您的加入)
  4. 【Gym 100015A】Another Rock-Paper-Scissors Problem
  5. 设计模式学习起点 UML类图笔记
  6. GridView九宫格菜单实现方式
  7. svn迁移
  8. python 实现对象模型
  9. Putty使用公钥认证时,报错:Disconnected: No supported authentication methods available(server sent:public key) 问题的解决
  10. rabbitmq的java简单的实现
  11. iOS多线程开发之GCD(中篇)
  12. HTTP协议报文、工作原理
  13. AIC与BIC
  14. Linux下用户和raid练习题
  15. React Native学习(一) 环境搭建
  16. MySQL字符集 utf8 和 utf8mb4 区别及排序规则 general_ci 和 unicode_ci 和 bin 的区别
  17. PHP+ffmpeg+nginx的配置实现视频转码
  18. 十六进制颜色值和rgb颜色值互相转换
  19. 算法练习LeetCode初级算法之数组
  20. JQuery Cross Domain Ajax(jsonp)

热门文章

  1. Linux的正则练习
  2. flex布局详解
  3. Java笔记(基础第一篇)
  4. [2019HDU多校第一场][HDU 6588][K. Function]
  5. 【Java-算法】 计算十六进制校验位
  6. mobx是什么?有什么优点?
  7. 在一个非默认的位置包含头文件stdafx.h
  8. 日期与时间(C/C++)
  9. PAT L2-001 紧急救援 —— (多参数最短路)
  10. hdu5492