这一章节我们来讨论一下内部类链接到外部类的几个方面。
上一章节主要展示了内部类封装一些实现,使得代码隐藏,但是内部类还可以链接到外部类,无需特殊条件,即可访问外部类的任何成员(属性域和方法),即它拥有外部类所有访问权限。
package com.ray.ch08;
public class Test {
private int id = 0;
public String name = "aaa";
private void say() {
System.out.println("Class Test Method say");
}
public void run() {
}
class Destination {
private void print() {
System.out.println(id);// 这里的id是int com.ray.ch08.Test.id
}
private void say() {
say();// Class Test Method say
System.out.println("Class Destination Method say");
}
}
private class Content {
private String a = name;
private void run() {
run();// Class Test Method run
}
}
}
上面的例子充分展现了内部类访问外部类的各种权限,从私有域到私有方法再到公有域和方法。
下面我们来展示一下内部类与迭代器模式之间的关系。
其实就是迭代器的实现。
package com.ray.ch08;
public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int num) {
items = new Object[num];
}
public void add(Object item) {
if(next<items.length){
items[next++] = item;
}
}
private class SequenceSelector implements Selector {
private int i = 0;
@Override
public boolean end() {
return items.length == i;
}
@Override
public void next() {
if (items.length > i) {
i++;
}
}
@Override
public Object current() {
return items[i];
}
}
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(i);
}
Selector selector = sequence.getSelector();
while (!selector.end()) {
System.out.println(selector.current());
selector.next();
}
}
}
interface Selector {
boolean end();
void next();
Object current();
}
总结:这一章节主要讲述了内部类链接到外部类,以及迭代器的实现。
这一章节就到这里,谢谢。
-----------------------------------