Java内部类(3):局部内部类
有这样一种内部类,它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。
匿名内部类,任意作用域中嵌入的内部类都属于局部内部类的范畴。
<局部内部类>
 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!
     }
 }
Java内部类(3):局部内部类的更多相关文章
- C#的匿名委托 和 Java的匿名局部内部类
		.NET:C#的匿名委托 和 Java的匿名局部内部类 目录 背景实验备注 背景返回目录 这几天重温Java,发现Java在嵌套类型这里提供的特性比较多,结合自身对C#中匿名委托的理解,我大胆的做了一 ... 
- .NET:C#的匿名委托 和 Java的匿名局部内部类
		背景 这几天重温Java,发现Java在嵌套类型这里提供的特性比较多,结合自身对C#中匿名委托的理解,我大胆的做了一个假设:Java的字节码只支持静态嵌套类,内部类.局部内部类和匿名局部内部类都是编译 ... 
- 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类
		内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ... 
- Java中的局部内部类
		package Smoke; public class Inner { private int num = 3; class Limian{ public void show(){ //内部类可以访问 ... 
- day04(权限修饰符,内部类,局部内部类,匿名内部类)
		权限修饰符, Public >protected >default > private public 公共权限 随便都可以访问 protected 子类可以访问权限 (子类 ... 
- Java 内部类(成员内部类、局部内部类、静态内部类,匿名内部类)
		一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用publ ... 
- JAVA面向对象-----局部内部类
		局部内部类 局部内部类概述:包含在外部类的函数中的内部类称之为局部内部类. 访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员. 注意:局部内部类只能访问所在函数的fana ... 
- Java -- 内部类, 成员内部类,局部内部类,匿名内部类,闭包和回调, 枚举类
		1. 成员内部类分为 静态内部类 和 非静态内部类. 非静态内部类 和 外部类的其他成员一样处理, 非静态内部类可以访问外部类的private的属性,而外部类不能访问非静态内部类的属性,需要实例非静 ... 
- Java的四种内部类
		Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ... 
- 学习android学习必备的java基础知识--四大内部类
		学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ... 
随机推荐
- 海康威视面试-java应用开发
			一面:技术面 (1)对着简历问本科学过的java相关课程,都学了哪些东西.很懵逼,很早之前学的东西,我都记不清楚了 (2)网络编程相关知识,我也不太懂,就回答了网络协议这块的知识 (3)线程相关,线程 ... 
- windows安装mysql(5.7.26版本)压缩包
			1.解压安装包,进入文件夹,并创建一个data文件夹! 2.修改 my-default.ini 文件 [mysql] default-character-set=utf8 [mysqld] port ... 
- C# 之 .net core -- EF code first连接Mysql数据库
			一.在Models 新建两个数据库类 这个是数据库需要生成的类基础(塑造外观) public class User { [Key] public string ID { get; set; } [Ma ... 
- Linux (Deppin ,Ubuntu )开发环境配置,VUE & dotnetcore  解决 yarn 找不到问题
			新装系统设置 清华镜像: https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/ 网易镜像: http://mirrors.163.com/.help/ubu ... 
- Java笔记(第五篇)
			抛出异常 使用throws声明抛出异常 Throws 通常用于方法声明,当方法中可能存在异常,却不想在方法中对异常进行处理时,就可以在声明方法时使用throws声明抛出的异常,然后再调用该方法的其他方 ... 
- 题解  【NOIP2006】作业调度方案
			[NOIP2006]作业调度方案 Description 我们现在要利用 m 台机器加工 n 个工件,每个工件都有 m 道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间 ... 
- hdu 5187 zhx's contest (快速幂+快速乘)
			zhx's contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ... 
- noi 第n小的质数
			总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个正整数n,求第n小的质数. 输入 一个不超过10000的正整数n. 输出 第n小的质数. 样例输入 10 样例输出 29 一定 ... 
- 【CUDA 基础】5.1 CUDA共享内存概述
			title: [CUDA 基础]5.1 CUDA共享内存概述 categories: - CUDA - Freshman tags: - CUDA共享内存模型 - CUDA共享内存分配 - CUDA共 ... 
- Python实用黑科技——以某个字段进行分组
			需求: 当前有个字典实例,你想以某个字段比如”日期”对整个字典里面的元素进行分组. 方法: itertools.groupby()函数是专门用来干这个活的.请看下面这个例子,这里有一个列表构成的字典, ... 
