1. 程式人生 > >Java語言基礎之內部類

Java語言基礎之內部類

內部類就是在類的內部再定義一個類,優點就是可以呼叫外部類的方法和私有變數

內部類分為靜態內部類(靜態繫結),匿名內部類,以及區域性內部類。

靜態內部類:在類中被static修飾的內部類

匿名內部類:不常用 如果只使用一次,可以寫成匿名內部類

區域性內部類:在方法中定義的類叫做區域性內部類,在方法中可以new 多次


Outer類中定義內部類Inner,以及靜態內部類Inner2

package Com;

public class Outer {
	private String name;
	
	
	//內部類在普通方法呼叫方式
	public void show()
	{
		System.out.println(name);
		System.out.println("Outer .... show");
		//第一種方式 在類的內部呼叫不需要建立外部物件(當前外部物件Outer()物件已經有了)
		Inner inner = new Inner();
		//第二種方式 建立外部物件Outer(),再呼叫外部物件的內部類物件Inner() 
		Outer.Inner inner2 = new Outer().new Inner();
	}
	
	
	//內部類在靜態方法中的呼叫方式
	public static void staFun()	{
		// 靜態方法不產生類的物件,是在編譯期放入記憶體的,靜態方法屬於類不屬於物件
		//Inner inner = new Inner();
		//在靜態方法中,必須建立外部物件,才能呼叫內部類
		Outer.Inner inner2 = new Outer().new Inner();
	}
	
	
	
	//普通內部類
	class Inner{
		int age;
		public void go()
		{
			System.out.println("innner....go");
		}
	}
	//靜態內部類
	static class InnerSta{
		public void go2()
		{
			System.out.println("InnerSta ...go");
		}
	}
}

main:

package Com;

import Com.Outer.InnerSta;

public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
	   // 普通內部類  需要先建立外部物件Outer,再建立內部物件Inner
	   Outer.Inner inner = new Outer().new Inner();
	   inner.go();
	   // 靜態內部類 內部類屬於外部類,直接用類名呼叫內部類即可建立物件
	   InnerSta inner2 = new Outer.InnerSta();
	   inner2.go2();

	}

}


內部類中使用介面和抽象類:

package Com;

public class Java3 {
	public void show()
	{
		
	}
	
	//內部類是介面
	interface Inner{
		void in();
	}
	//內部類是抽象類
	abstract class B{
		 
	 }
	//繼承內部類抽象類,實現內部類介面
	 class A extends B implements Inner{
		@Override
		public void  in()
		{
			
		}
	}
	 
}