• 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 }
  • 相关阅读:
    从域名锁定该网站所在城市
    微信接口开发 2----接收微信接口返回的数据
    微信接口开发1--向微信发送请求--获取access_token
    MVC-前端设计
    MVC-第一个简单的程序
    MVC-基础02
    MVC-基础01
    表值函数
    视图

  • 原文地址:https://www.cnblogs.com/storml/p/8317963.html
Copyright © 2020-2023  润新知