• Java内部类(3):局部内部类


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

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

    <局部内部类>

     1 interface Destination {
     2     String readLabel();
     3 }
     4 
     5 class Test003Sub {
     6 
     7     public Destination destination(String s) {
     8         class Test003Inner1 implements Destination {
     9             private String s;
    10 
    11             private Test003Inner1(String s) {
    12                 this.s = s;
    13             }
    14 
    15             @Override
    16             public String readLabel() {
    17                 return s;
    18             }
    19         }
    20         return new Test003Inner1(s);
    21     }
    22 }
    23 
    24 public class Test003 {
    25     public static void main(String[] args) {
    26         Test003Sub test003 = new Test003Sub();
    27         System.out.println(test003.destination("Hello World").readLabel());// Hello World
    28     }
    29 }

    <匿名内部类>

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

     1 interface Destination {
     2     String readLabel();
     3 }
     4 
     5 class Test003Sub {
     6     public Destination destination(final String s) {
     7         return new Destination() {
     8             private String sin = s;
     9 
    10             @Override
    11             public String readLabel() {
    12                 return sin;
    13             }
    14         };
    15     }
    16 }
    17 
    18 public class Test003 {
    19     public static void main(String[] args) {
    20         Test003Sub test003 = new Test003Sub();
    21         System.out.println(test003.destination("Hello World").readLabel());// Hello World
    22     }
    23 }

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

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

     1 class Test004Sub {
     2     String internalTracking(boolean b) {
     3         String s = "";
     4         if (b) {
     5             class TrackingSlip {
     6                 private String s;
     7 
     8                 private TrackingSlip(String s) {
     9                     this.s = s;
    10                 }
    11 
    12                 String getSlip() {
    13                     return s;
    14                 }
    15             }
    16             TrackingSlip ts = new TrackingSlip("Hello World!");
    17             s = ts.getSlip();
    18         } else {
    19             s = "No Data!";
    20         }
    21         return s;
    22     }
    23 }
    24 
    25 public class Test004 {
    26     public static void main(String[] args) {
    27         Test004Sub test004 = new Test004Sub();
    28         System.out.println(test004.internalTracking(true)); // Hello World!
    29         System.out.println(test004.internalTracking(false)); // No Data!
    30     }
    31 }
  • 相关阅读:
    IDF实验室-CTF训练营-牛刀小试CTF
    百度杯CTF夺旗大赛9月场writeup
    基于Mapxtreme for JAVA的电子地图设计与实现
    centos下 apache+mysql+php的安装
    ssh远程登陆
    毕业设计-JSP论文盲审系统
    Android毕业设计-微圈
    基于Android的高校饮水宝app
    小程序不支持wx.request同步请求解决方法
    微信小程序服务类目大坑:特殊行业服务类目所需资质材料
  • 原文地址:https://www.cnblogs.com/storml/p/8317963.html
Copyright © 2020-2023  润新知