1. 程式人生 > 其它 >JAVA面試——內部類

JAVA面試——內部類

技術標籤:JAVA

定義在類內部的類稱為內部類。內部類根據不同的定義方式,可分為靜態內部類/成員內部類/區域性內部類和匿名內部類。

靜態內部類

	定義在類內部的靜態類成為靜態內部類。靜態內部類可以訪問外部類的靜態變數和方法;在靜態內部類中可以定義
靜態變數/方法/建構函式等;靜態內部類通過“外部類.靜態內部類”的方式呼叫。
	public class OuterClass{
		private static String className = "StaticInnerClass";
		public static class StaticInnerClass{
			public
void getClassName(){ System.out.println("className:"+className); } } public static void main(String[]args){ OuterClass.StaticInnerClass InnerClass = new OuterClass.StaticInnerClass(); InnerClass.getClassName(); } }
  • Java集合類HashMap在內部維護了一個靜態內部類Node陣列用於存放元素,對使用者是透明的。這種和外部類關係密切且不依賴外部類例項的類,可以使用靜態內部類實現。

成員內部類

	定義在類內部的非靜態類叫做成員內部類,在成員內部類中不能定義靜態方法和變數(final修飾的除外),因為成員內部類都是非靜態的,
而在JAVA的非靜態程式碼塊中不能定義靜態方法和變數。
	public class OutClass{
		private static int a;
		private int b;
		//定義一個成員內部類
		public class MemberInnerClass{
			public void print(){
				System.out.println(a);
				System.out.println(b);
			}
		}
		//使用方式跟靜態內部類相同
}

區域性內部類

	 定義在方法中的類叫做區域性內部類。當一個類只需要在某個方法中使用某個特定的類時,可以通過區域性類來優雅的實現。
public class OutClass{
		private static int a;
		private int b;
		public void partClassTest(final int c){
			final int d = 1;
			// 在方法中定義一個區域性內部類
			class PastClass{
				public void print(){
					System.out.println(c);
				}
			}
		}
	}

匿名內部類

	匿名內部類指通過繼承一個父類或者實現一個介面的方法直接定義並使用的類。匿名內部類沒有class關鍵字,
這是因為匿名內部類直接使用new生成一個物件的引用。
	public abstract class Worker{
		private String name;
		public String getName(){ return name; }
		public void SetName(String name){this.name = name;}
		public abstract int workTime();
	}
	public void Test {
		public void test(Worker worker){
			System.out.println(worker.getName()+"工作時間"+worker.workTime());
		}
		public static void main(String[]args){
			Test test = new Test();
			//在方法中使用匿名內部類
			test.test(new Worker(){
				public int workTime(){
					return 8;
				}
				public String getName(){
					return "apex";
				}
			});
		}
	}