Java内部类和外部类的通信探索
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();
}
}
Java内部类和外部类的通信探索的更多相关文章
- Java内部类与外部类的那些事
昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类) ...
- java内部类 和外部类的区别
java 内部类和静态内部类的区别 详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...
- java内部类和外部类
1.使用static可以声明一个内部类, 可以直接在外部调用 class Outer{ // 定义外部类 private static String info = "hello world& ...
- java 内部类与外部类的区别
最近在看Java相关知识的时候发现Java中同时存在内部类以及非公有类概念,而且这两个类都可以不需要单独的文件编写,可以与其他类共用一个文件.现根据个人总结将两者的异同点总结如下,如有什么不当地方,欢 ...
- Java内部类与外部类
错误提示: 没有任何类型 TestThread 的外层实例可访问.必须用类型 TestThread 的外层实例(例如,x.new A(),其中 x 是 TestThread 的实例)来限定分配. pu ...
- Java内部类持有外部类的引用详细分析与解决方案
在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命 ...
- 从字节码的角度看Java内部类与外部类的互相访问
Java中non-static内部类为何可以访问外部类的变量?Java中外部类又为何可以访问内部类的private变量?这两个问题困扰过我一段时间,查了一些网上的答案,大多从“闭包”概念入手,理解起来 ...
- Java内部类引用外部类中的局部变量为何必须是final问题解析
今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...
- 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例
内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...
随机推荐
- COJ 0580 4021征兵方案
4021征兵方案 难度级别: C: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 现在需要征募女兵N人,男兵M人,每征募一个人 ...
- COJN 0583 800602分苹果
800602分苹果 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放, ...
- HTML5 Web socket和socket.io
what is websockets Two-way communication over ont TCP socket, a type of PUSH technology HTML5的新特性,用于 ...
- Android Studio 首次安装报错 Java.lang.RuntimeException:java.lang.NullPointerException...错
下次安装报:Java.lang.RuntimeException: java.lang.NullPointerException......错 只需在文件..\Android Studio\bin\i ...
- Topcoder 好题推荐
SRM SRM147 DIV1 1000pt DP SRM148 DIV1 1100pt 递归 SRM149 DIV1 1000pt math SRM150 DIV1 500pt DP SRM469 ...
- 我理解的javascript单线程机制
废话不多说,我们先来看几个例子: 1. setTimeout( console.log(2); result: 2 1 2. console.log(100 setTimeout( cons ...
- 部分实用的SQL语句
一.在数据库创建表格的SQL语句 1,创建一个link表格,包含属性:lid 主键,title 标题, imgpath 图片地址 , url 网址 , info 说明, isshow 显示1 ...
- Apache Tomcat8必备知识
Apache Tomcat8必备知识 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 一.Apache Tomcat 8介绍 Apache Tomcat ...
- C语言单元測试
C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...
- 修改MySQL引擎
1. 显示MySQL支持的引擎:show engines;