package org.wangfy.dev.lang.innerclass;
/**
*
* OutterClass.java
*
* @author fuyewang E-mail: willfcareer@sohu.com
* @version 1.0 Creation Date:2009-11-25 下午09:18:12
* @since 1.0
*
*/
public class OutterClass
{
private int i = 0;
private String s = "abc";
/*
* this is static nested class
*/
private static class StaticNestedClass
{
private void yell()
{
System.out.println(this.toString());
// OutterClass.this.yell();//靜態內部類執行個體沒有外部類執行個體的引用
}
}
/*
* this is inner class
*/
private class InnerClass
{
private void yell()
{
System.out.println(this.toString());
OutterClass.this.yell();// 內部類執行個體顯式使用外部類執行個體的方式
}
}
private void yell()
{
System.out.println(this.toString());
}
private void run(int i)
{
/*
* this is local class
*/
class LocalClass
{
public void yell()
{
System.out.println(this.toString());
}
}
/*
* this is anonymous class
*/
new Object()
{
public void yell()
{
// i = 3; // 匿名內部類不能引用或者改變從外部類傳入的非final參數
// System.out.println(i);
OutterClass.this.i = 2;
OutterClass.this.s = "bcd";
System.out.println(OutterClass.this.i);
System.out.println(OutterClass.this.s);
System.out.println(this.toString());
}
}.yell();
LocalClass lc = new LocalClass();
InnerClass ic = new InnerClass();
StaticNestedClass sc = new StaticNestedClass();
lc.yell();
ic.yell();
sc.yell();
}
public static void main(String[] args)
{
OutterClass oc = new OutterClass();
oc.run(3);
}
}
關於final類型的變數,請參考
http://blog.csdn.net/axman/archive/2006/12/25/1460544.aspx