zoukankan      html  css  js  c++  java
  • java innerclasses(内部类)

    可以将一个类定义在另一个类的内部,这就是内部类

    创建内部类的方式---把类的定义置于外部类的里面

    典型的情况是,外部类将有一个方法,该方法返回一个指向内部类的引用,就像在to()和contents()方法中看到的一样,                           如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须像main()方法中那样,具体地指明这个对象的类型  :OuterClassName.InnerClassName

    //名字隐藏和组织代码
    //
    : innerclasses/Parcel2.java // Returning a reference to an inner class. public class Parcel2 { class Contents { private int i = 11; public int value() { return i; } } class Destination { private String label; Destination(String whereTo) { label = whereTo; } String readLabel() { return label; } } public Destination to(String s) { return new Destination(s); } public Contents contents() { return new Contents(); } public void ship(String dest) { Contents c = contents(); Destination d = to(dest); System.out.println(d.readLabel()); } public static void main(String[] args) { Parcel2 p = new Parcel2(); p.ship("Tasmania"); Parcel2 q = new Parcel2(); // Defining references to inner classes: Parcel2.Contents c = q.contents(); Parcel2.Destination d = q.to("Borneo"); } } /* Output: Tasmania *///:~

    二. 连接到外部类 

    内部类除了名字隐藏和组织代码的模式,还有其它用途,当生成一个内部类的对象时,此对象与制造它的外外围对象(enclosing object)之间就有了一种联系,所以它可以访问其外围对象的所有成员,而不需要任何特殊条件,此外内部类还拥有其外围类的所有元素的访问权

    //: innerclasses/Sequence.java
    // Holds a sequence of Objects.
    package object;
    interface Selector {
      boolean end();
      Object current();
      void next();
    }    
    
    public class Sequence {
      private Object[] items;
      private int next = 0;
      public Sequence(int size) { items = new Object[size]; }
      public void add(Object x) {
        if(next < items.length)
          items[next++] = x;
      }
      private class SequenceSelector implements Selector {
        private int i = 0;
        public boolean end() { return i == items.length; }
        public Object current() { return items[i]; } //items属于外部类
        public void next() { if(i < items.length) i++; }
      }
      public Selector selector() {
        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.selector();
        while(!selector.end()) {
          System.out.print(selector.current() + " ");
          selector.next();
        }
      }
    } /* Output:
    0 1 2 3 4 5 6 7 8 9
    *///:~
  • 相关阅读:
    软件测试课初感
    《将博客搬至CSDN》
    ZOJ 3331-Process the Tasks (DP)
    HUST1605
    Codeforces 611D New Year and Ancient Prophecy DP
    HDU计算机学院大学生程序设计竞赛(2015’12)1005 Bitwise Equations
    HDU计算机学院大学生程序设计竞赛(2015’12)1003 The collector’s puzzle
    HDU计算机学院大学生程序设计竞赛(2015’12)1007 Pick Game
    HDU计算机学院大学生程序设计竞赛(2015’12)1008 Study Words
    HDU计算机学院大学生程序设计竞赛(2015’12)1006 01 Matrix
  • 原文地址:https://www.cnblogs.com/jiangfeilong/p/10218589.html
Copyright © 2011-2022 走看看