Java測試內部類和巢狀類位置的合法性

小弟季義欽發表於2012-11-03
/**
 * 
 */
package innerClass;
/**
 * 結論: 
 * 靜態環境中不能引用非靜態域。
 * 靜態方法/巢狀類只能宣告在靜態的或者頂層結構中
 * 非靜態方法/內部類可以放置在任何位置,任何一層
 * */
public class InnerClassAccess {	
	private float f = 1.0f;	//非靜態欄位
	
	class InnerClassA{
		//static void method(){}//靜態方法只能宣告在靜態的或者頂層的結構裡面
		//static class TestA{} 	//巢狀類只能宣告在靜態的或者頂層的結構裡面		
		class Test{				//內部類可以巢狀放在任意一層
			class TestB{
				class TestC{}
			}
		} 
	}
	
	void function2(){		//內部類可以放置在非靜態方法中
		class TestF{};
		new TestF();
	}
	
	static void function(){	//內部類也可以放置在靜態方法中
		class TestD{}
		new TestD();
	}
	
	static class InnerClassB{
		public void method(){
			//f = 20; 		//在巢狀類中不能引用非靜態域
		}
		static void f(){	//在靜態方法中不能引用非靜態域
			//f = 20;
		}
		class TestE{}		//內部類可以放置在巢狀類中
	}
	
	//內部類可以是抽象類
	abstract class InnerClassC{
		public abstract void method();
		abstract class InnerClassT{} //內部抽象類也可以巢狀
	}
	
	//內部類可以是介面
	interface InnerClassD{
		public void method();
		interface InnerClassI{}		//內部介面也可以巢狀
	} 
	
	//私有內部類中可以放置public方法
	private class InnerClassX{
		public void g(){}		
	}

	public static void main(String[] args) {
		new InnerClassAccess();
	}
}

相關文章