class Outer{
class Inner{
{
System.out.println("Inner created");
}
}
Inner getInner(){return new Inner();}
}
public class E01 {
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner i = o.getInner();
}
}
class StringHolder{
private String data;
public StringHolder(String data) {
this.data = data;
}
@Override
public String toString() {
return data;
}
}
public class E02 {
public static void main(String[] args) {
Sequence sequence = new Sequence(10);
for (int i = 0; i < 10; i++) {
sequence.add(new StringHolder(Integer.toString(i)));
}
Selector selector = sequence.selector();
while (!selector.end()){
System.out.println(selector.current() + " ");
selector.next();
}
}
}
Inner包含一个显示这个域的toString()方法,创建一个Inner类型的对象并显示它。
class Outer{
private final String data;
class Inner{
@Override
public String toString() {
return data;
}
}
public Outer(String data) {
this.data = data;
}
Inner getInner(){return new Inner();}
}
public class E01 {
public static void main(String[] args) {
Outer o = new Outer("Inner accessing outer!");
Outer.Inner i = o.getInner();
System.out.println(i.toString());
}
}
class Sequence2{
private Object[] items;
private int next;
public Sequence2(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;
@Override
public boolean end() {
return i == items.length;
}
@Override
public Object current() {
return items[i];
}
@Override
public void next() {
if (i<items.length)
i++;
}
public Sequence2 sequence(){
return Sequence2.this;
}
}
public Selector selector(){
return new SequenceSelector();
}
public boolean check(){
return this == ((SequenceSelector)selector()).sequence();
}
}
public class E04 {
public static void main(String[] args) {
Sequence2 s = new Sequence2(10);
System.out.println(s.check());
}
}
练习5:
class Outer3{
class Inner{
{
System.out.println("Inner created");
}
}
}
public class E05 {
public static void main(String[] args) {
Outer3 o = new Outer3();
Outer3.Inner i = o.new Inner();
}
}
import exercise6.SimpleInterface;
import exercise6b.SimpleClass;
public class E06 extends SimpleClass {
public SimpleInterface get(){return new Inner();}
public static void main(String[] args) {
new E06().get().f();
}
}
练习7:
public class E07 {
private int i = 10;
private void f(){
System.out.println("E07.f()");
}
class Inner{
void g(){
i++;
f();
}
}
public void h(){
Inner in = new Inner();
in.g();
System.out.println("i = " + i);
}
public static void main(String[] args) {
E07 ica = new E07();
ica.h();
}
}
练习8:
class Outer4{
class Inner{
private int j;
private void h(){
System.out.println("Inner.h called");
System.out.println("Inner.j = " + j);
}
}
public void testInnerAccess(){
Inner i = new Inner();
i.j = 47;
i.h();
}
}
public class E08 {
public static void main(String[] args) {
Outer4 o = new Outer4();
o.testInnerAccess();
}
}
import exercise6.SimpleInterface;
public class E09 {
public SimpleInterface get(){
class SI implements SimpleInterface{
public void f(){
System.out.println("SI.f");
}
}
return new SI();
}
public static void main(String[] args) {
SimpleInterface si = new E09().get();
}
}
练习10:
import exercise6.SimpleInterface;
public class E10 {
public SimpleInterface get(){
{
class SI implements SimpleInterface{
public void f(){
System.out.println("SI.f");
}
}
return new SI();
}
}
public static void main(String[] args) {
SimpleInterface si = new E10().get();
si.f();
}
}
import exercise6.SimpleInterface;
class Outer5{
private class Inner implements SimpleInterface{
public void f(){
System.out.println("Outer5.Inner.f");
}
}
public SimpleInterface get(){return new Inner();}
public Inner get2(){ return new Inner();}
}
public class E11 {
public static void main(String[] args) {
Outer5 out = new Outer5();
SimpleInterface si = out.get();
si = out.get2();
}
}