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

Java内部类和外部类的通信探索的更多相关文章

  1. Java内部类与外部类的那些事

    昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类) ...

  2. java内部类 和外部类的区别

    java 内部类和静态内部类的区别  详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...

  3. java内部类和外部类

    1.使用static可以声明一个内部类, 可以直接在外部调用 class Outer{ // 定义外部类 private static String info = "hello world& ...

  4. java 内部类与外部类的区别

    最近在看Java相关知识的时候发现Java中同时存在内部类以及非公有类概念,而且这两个类都可以不需要单独的文件编写,可以与其他类共用一个文件.现根据个人总结将两者的异同点总结如下,如有什么不当地方,欢 ...

  5. Java内部类与外部类

    错误提示: 没有任何类型 TestThread 的外层实例可访问.必须用类型 TestThread 的外层实例(例如,x.new A(),其中 x 是 TestThread 的实例)来限定分配. pu ...

  6. Java内部类持有外部类的引用详细分析与解决方案

    在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命 ...

  7. 从字节码的角度看Java内部类与外部类的互相访问

    Java中non-static内部类为何可以访问外部类的变量?Java中外部类又为何可以访问内部类的private变量?这两个问题困扰过我一段时间,查了一些网上的答案,大多从“闭包”概念入手,理解起来 ...

  8. Java内部类引用外部类中的局部变量为何必须是final问题解析

    今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...

  9. 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

    内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...

随机推荐

  1. 【转】SqlLite .Net 4.0 System.IO.FileLoadException”类型的未经处理的异常出现在XXX

    原文地址:http://www.csharpcity.com/2010/sqlite-ado-net-c-4-0/ ---------------------- 解决方法: Paste the fol ...

  2. wxWidgets搜索事件处理函数顺序

    详细参见:使用wxWidgets进行跨平台程序开发 (王强 译) 实例: class MyFrame:public wxFrame { public: MyFrame() { wxButton* bu ...

  3. Linux下DVD-R刻录问题

    之前CD的刻录一直使用的命令行工具集cdrtools中的mkisofs.cdrecord.然后本来刻录DVD可以使用它的growisofs命令. 现在假设原始文件目录为/src/,目标目录为/dest ...

  4. mybatis3-generator-plugin插件地址

    http://repo1.maven.org/maven2/com/github/oceanc/mybatis3-generator-plugin/0.4.0/

  5. C++编写ATM(1)

    // ATM的初始.cpp : 定义控制台应用程序的入口点. // /************************************************* 运行环境: VS2008 作者 ...

  6. ubuntu修改系统环境变量文件导致起不来

    修改/etc/environment文件导致系统起不来. 长按shift,进入恢复界面,然后以root方式登录命令行界面 然后vi修改/etc/environment文件 提示:Unable to o ...

  7. java:利用数组实现将古诗词纵向输出

      java:利用二维数组实现将古诗词纵向输出. 从网络上随便搜索一首古诗词,这里刻意选择句子长短不一的诗词 1.首先先把诗词放进一个二维数组中. 这里将数组类型定义成char 类型,因为将其定义为S ...

  8. AS 断点调试 debug

    debug面板 点击下图工具栏开启调试会话 此种调试方式是通过冻结应用运行的状态,仿佛时间停止了一般,然后我们逐一观察此时程序的各个参数是否符合我们的预期. 这种调试方法适用于对时间不敏感的程序.也就 ...

  9. Java多线程——线程池

    系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互.在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 与数据库连接池类似 ...

  10. 06-自定义Attribute标记案例

    自定义Attribute: 1)Attribute都从System. Attribute类继承,类名一般以Attribute结尾 2) 标记类的用途—AttributeUsage标记(标记的标记):A ...