Java内部类和外部类的通信探索

时间:2023-12-13 20:40:08

  1、内部类访问外部类的成员和方法

  在内部类中,可以无障碍地访问外部类的所有成员和方法。

  在下面的实验代码中,可以看到,内部类sl可以访问外部类的私有成员:sz 和 cur.

  同时可以访问私有方法:privatePrintCur();

  2、外部类访问内部类的成员和方法

  在外部类中,同样可以*访问内部类的成员和方法。

  在实验代码中,外部类可以访问内部类的私有成员:在printCur方法中访问私有成员cur.

  3、实验代码 www.yztrans.com

  [java] view plaincopy

  // CommunicationTest.java

  // To test the communication of

  // outter class and inner class.

  package blog.pdcxs007.innerClass;

  interface selector {

  boolean hasNext();

  Object current();

  int next();

  }

  class Sequence {

  private int size;

  private Object[] sq;

  private int cur = 0;

  public Sequence(int sz) {

  size = sz;

  sq = new Object[sz];

  }

  public void add(Object obj) {

  if (cur < size)

  sq[cur++] = obj;

  }

  class sl implements selector {

  private int cur = 0;

  public boolean hasNext() {

  return cur < size;

  }

  public Object current() {

  //System.out.println("In selector.current()");

  privatePrintCur(this);

  //System.out.println("Out");

  return sq[cur];

  }

  public int next() {

  return cur++;

  }

  }

  public selector getSelector() {

  return new sl();

  }

  public void printCur(sl slc) {

  System.out.println("Current is: " + slc.cur);

  }

  private void privatePrintCur(sl slc) {

  System.out.println("Current is: " + slc.cur);

  }

  }

  public class CommunicationTest {

  public static void main(String[] args) {

  Sequence sq = new Sequence(5);

  selector slc = sq.getSelector();

  for(int i = 0; i < 5; i++)

  sq.add(Integer.toString(i));

  while(slc.hasNext()) {

  System.out.println(slc.current());

  sq.printCur((Sequence.sl) slc);

  slc.next();

  }

  }

  } www.lefeng123.com