zoukankan      html  css  js  c++  java
  • Java中的Inner Class (一)

    Inner Class看起来是一个简单的Code-Hideing机制,但是Java的Inner Class和C++的有所不同 - Inner Class能够和外部类(Surrounding Class)直接打交道,而无任何限制。

    当你创建一个内部类对象的时候,这个对象会保持同外部对象(the object of surrounding class)的联系,这样内部类对象可以自由的访问外部类对象的成员,没有任何限制。比如:

    // 接口定义

    interface Selector{

      boolean end();

      Object current();

      void next();

    }

    // Sequence class

    public class Sequence{

      private Object[] items;

      private int next = 0;

      public Sequence(int size){ items = new Object[size]; }

      pubic void add(Object x){

        if (next < items.length)

          items[next++] = x;

      }

      // 内部类实现Selector接口。

      private class SequenceSelector impements Selector{

        private int i = 0;

        public boolean end() {return i == items.length;} //直接使用Sequence的成员。

        Object current() { return items[i]; }

        public void next() { if (i < items.length) i++; }

      }

      // 将内部类实现以Selector接口形式暴露出来。

      public Selector getSelector() { return new SequenceSelector(); }

      // 测试代码

      public static void main(String[] args){

        Sequence sequence = new Sequence(10);

        for (int i  = 0; i < 10; i++) sequence.add(Integer.toString(i));

        Selector selector = sequence.getSelector();

        while(!selector.end()){

          System.out.print(selector.current() + " ");

          selector.next();

        }

      }

    }

    //输出

    0 1 2 3 4 5 6 7 8 9

    从上面的代码中可以看出,inner class是一种非常好的隐藏代码的设计模式 - 而且非常方便,不必为out class和Inner class直接的交流而操心。

  • 相关阅读:
    经验:Library Cache Lock之异常分析-云和恩墨技术通讯精选
    Schnorr 签名算法与聚合签名
    5G 第五代移动通信网络
    《机器学习》周志华西瓜书习题参考答案:第9章
    启动tomcat,在黑色窗口中看到乱码
    Linux系统目录结构以及简单说明
    Linux系统目录结构以及简单说明
    锤子科技官网:问题整理及注意事项
    锤子科技官网:问题整理及注意事项
    锤子科技官网:问题整理及注意事项
  • 原文地址:https://www.cnblogs.com/AllanDragoon/p/3251924.html
Copyright © 2011-2022 走看看