1. 程式人生 > >java學習之內部類

java學習之內部類

內部類訪問特點:
1、內部類可以直接訪問外部類中的成員。
2、外部類要訪問內部類,必須建立內部類的物件。


內部類一般用於類的設計。
分析事物時,發現該事物描述中還有事物,而且這個事物還在訪問被描述

事物的內容。這是就把還有的事物定義成內部類來描述。

class Outer1	//外部類
{
	private int num = 3;
	class Inner1	//內部類
	{
		void show()
		{
			System.out.println("Inner1 show run " + num);
		}
	}
	public void method()
	{
		Inner1 in = new Inner1();	//建立內部類物件
		in.show();
	}
}

class Outer2
{
	private static int num = 5;
	static class Inner2		//靜態內部類
	{
		void show1()
		{
			System.out.println("Inner2 show1 run " + num);
		}
		static void show2()
		{
			System.out.println("Inner2 show2 run " + num);
		}
	}
}

public class InnerClassDemo1 
{

	public static void main(String[] args)
	{
		Outer1 out1 = new Outer1();
		out1.method();
		//直接訪問外部內中的內部類中的成員
		Outer1.Inner1 in1 = new Outer1().new Inner1();
		in1.show();
		//如果內部類是靜態的,相當於一個外部類
		Outer2.Inner2 in = new Outer2.Inner2();
		in.show1();
		//如果內部類是靜態的,其成員是靜態的
		Outer2.Inner2.show2();
	}
}

 

如果內部類中定義了靜態成員,那麼該內部類也必須是靜態的。

為什麼內部類能直接訪問外部類中的成員?
因為內部類持有了外部類的引用:外部類名.this

內部類在區域性位置上只能訪問區域性中被final修飾的區域性變數。

class Outer
{
	int num = 3;
	void method()
	{
		final int x = 10;	//final修飾的區域性變數
		class Inner
		{
			void show()
			{
				System.out.println("Inner show run..." + x);
			}
		}
		Inner in = new Inner();
		in.show();
	}
}