• 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直接的交流而操心。

  • 相关阅读:
    windows下面安装Python和pip教程
    Python已安装第三方库
    Python安装cx_Oracle第三方库(Mac osx Yosemite Intel i5环境)
    7.Python进阶_函数对象
    6.Python进阶_循环对象
    5.Python进阶_循环设计
    UltraEdit中粘贴问题
    UltraEdit的代码片的编码设置
    使用C#实现SSLSocket加密通讯 Https
    sql while 循环要加begin end
  • 原文地址:https://www.cnblogs.com/AllanDragoon/p/3251924.html
Copyright © 2020-2023  润新知