zoukankan      html  css  js  c++  java
  • Java 在方法和作用域内的内部类

    通常,如果所读写 的代码包含了内部类,那么它们都是"平凡的"内部类,简单并且容易理解,然而,内部类的语法覆盖了大量其它的更加难以理解的计数,例如可以在一个方法里或者在任意的作用域里定义内部类.这么做有两个理由

    1)如前所述,你实现了某类型的接口,于是可以创建并返回对其的引用

    2)你要创建一个复杂的问题,想创建一个类来辅助你的解决方案,但是又不希望这个类是公共可用的.

    在后面的例子中前面的代码将被修改,以用来实现:

    1)一个定义在方法中的类

    2)一个定义在作用域内的类,此作用域在方法的内部

    3)一个实现了接口的匿名类

    4)一个匿名类,它扩展了有非默认构造器的类

    5)一个匿名类,它执行字段初始化

    6)一个匿名类,它通过实例初始化实现构造(匿名类不可以能有过构造器)

    //: innerclasses/Destination.java
    package object;
    public interface Destination {
      String readLabel();
    } ///:~
    //: innerclasses/Parcel5.java
    // Nesting a class within a method.
    package object;
    public class Parcel5 {
      public Destination destination(String s) {
        class PDestination implements Destination {//在destination方法之外不可使用类,可以通过Destination使用
          private String label;                   //PDestination类的public方法
    private PDestination(String whereTo) { label = whereTo; } public String readLabel() { return label; } } return new PDestination(s); } class PDestination //可以定义和PDestination重名的类,但最好不这样做  { } public static void main(String[] args) { Parcel5 p = new Parcel5(); Destination d = p.destination("Tasmania"); } } ///:~
    //: innerclasses/Parcel6.java
    // Nesting a class within a scope.
    package object;
    public class Parcel6 {
      private void internalTracking(boolean b) {
        if(b) {
          class TrackingSlip { //在if域之外类TrackingSlip不可用,可以通过internalTracking方法调用,TrackingSlip类的方法
            private String id;
            TrackingSlip(String s) {
              id = s;
            }
            String getSlip() { return id; }
          }
          TrackingSlip ts = new TrackingSlip("slip");
          String s = ts.getSlip();
        }
        // Can't use it here! Out of scope:
        //! TrackingSlip ts = new TrackingSlip("x");
      }    
      public void track() { internalTracking(true); }
      public static void main(String[] args) {
        Parcel6 p = new Parcel6();
        p.track();
      }
    } ///:~
  • 相关阅读:
    Divide Two Integers
    LRU Cache
    Max Points on a Line
    Recover Binary Search Tree
    Copy List with Random Pointer
    IEE修改最大连接数
    SQL Tuning 基础概述02
    RHEL 本地yum源配置
    Linux演示 dd测试IO
    Linux平台oracle 11g单实例 安装部署配置 快速参考
  • 原文地址:https://www.cnblogs.com/jiangfeilong/p/10223232.html
Copyright © 2011-2022 走看看