JAVA_SE基礎——51.內部類

在Java中,容許在一個類的內部定義類,這樣的類稱做內部類,這個內部類所在的類稱做外部類。根據內部類的位置、修飾符和定義的方式可分爲成員內部類、靜態內部類、方法(局部內部類)內部類。html


內部類:一個類定義在另一個類的內部,那麼該類就稱做爲內部類。

內部類的class文件名: 外部類$內部類.  好處:便於區分該class文件是屬於哪一個外部類的。
java




成員內部類優化


在類中除了能夠定義成員變量、成員方法,還能夠定義類,這樣的類被稱做成員內部類。spa

成員內部類的訪問方式:

方式一:在外部類提供一個方法建立內部類的對象進行訪問。code1使用此方式

方式二:在其餘類直接建立內部類的對象。code2使用此方式code

格式:外部類.內部類  變量名 = new 外部類().new 內部類();
htm


code1對象

class A{
	int num = 10 ;
	//下面的代碼定義了一個成員方法,方法中訪問內部類
	public void test(){
		B a = new B() ;
		a.show() ;
	}
	//下面的代碼定義了一個成員內部類
	class B{
		public void show(){
			System.out.println("num = "+num) ;
		}
	}
}
class Demo1{

	public static void main(String[] args) {
		A a = new A() ;
		a.test() ;
	}
}
運行結果:

num = 10it


code2class

class A{
	int num = 10 ;
	
	//下面的代碼定義了一個成員內部類
	class B{
		public void show(){
			System.out.println("num = "+num) ;
		}
	}
}
class Demo2{

	public static void main(String[] args) {
		A.B a = new A().new B() ;
		a.show() ;
	}
}
運行結果:

num = 10test



內部類的好處:內部類能夠直接訪問外部類的全部成員。





靜態內部類

可使用static關鍵字來修飾一個成員內部類,該內部類被稱做靜態內部類,它能夠在不建立外部類對象的狀況下被實例化(由於靜態內部類隨着外部類的加載而加載)。


靜態內部類,在其餘類建立 的格式:

外部類.內部類  變量名 = new 外部類.內部類();  code3使用此方式

code3

class A{
	//定義靜態成員變量
	static int num = 10 ;
	
	//下面的代碼定義了一個靜態內部類
	static class B{	
		public void show(){
			System.out.println("num = "+num) ;
		}
	}
}
class Demo3{

	public static void main(String[] args) {
		A.B a = new A.B() ;
		a.show() ;
	}
}

運行結果:

num = 10


P.S.

在靜態內部類中只能訪問外部類的靜態方法,若是將外部類的靜態成員num的static關鍵字去掉,將會報錯

在靜態內部類中能夠定義靜態的成員,而在非靜態的內部類中不容許定義靜態的成員。(由於內部類中的靜態成員隨着內部類的加載而加載,可是這樣違背了當初sun公司定義的:靜態的成員數據是不須要對象存在才能訪問。





方法內部類(局部內部類)

方法內部類是指在成員方法中定義的類,它只能在當前方法中被使用。

局部內部類: 在一個類 的方法內部定義另一個類,那麼另一個類就稱做爲局部內部類。
局部內部類要注意的細節:

局部內部類能夠訪問外部類的成員變量、code4實現了此句話


若是局部 內部類訪問了一個局部變量,那麼該局部變量必須使用final修飾(java1.8如下 局部變量沒有用final修飾會報錯)、  (個人java1.8  試驗過了,沒有final也不會報錯,估計優化了吧。。微笑



code4

class A{
	int num = 10 ;
	
	//下面的代碼定義了一個成員內部類
	public void test(){
		
		class B{
			public void show(){
				System.out.println("num = "+num) ;
			}
		}
	//因爲B類是方法內部類,所以只能在方法中建立該類的實例對象並調用show()方法、
		B b = new B() ;
		b.show() ; 
	}

}
class Demo4{

	public static void main(String[] args) {
		A a = new A() ;
		a.test() ;
	}
}
運行結果:

num = 10


在A類的test()方法中定義了一個內部類B ,因爲B類是方法的內部類,所以程序只能在方法中建立該類的實例對象並調用show()方法。 從結果上看,方法內部類能夠訪問外部類的成員變量。

看完本章節以爲對本身都幫助的,寫個評論頂頂大笑

相關文章
相關標籤/搜索