java內部類之成員內部類

biubiubiuo發表於2018-02-16

內部類概念:顧名思義,就是將一個類定義在另一個個類內部。內部的類稱之為內部類 。

內部類的主要特點:
1.內部類可以很好的實現隱藏,可以使用protected、private修飾符。
2.內部類可以直接訪問外部類的所有成員,包括私有成員
3.外部類不能直接訪問內部類的成員,必須首先要建立內部類的物件才可以訪問。
4.內部類可以解決一些問題,比如間接地實現繼承。可以避免修改介面而實現同一個類
中兩種同名方法的呼叫

內部類有四種:

成員內部類,靜態內部類,匿名內部類,區域性內部類

 

起名字時,$符號是合法字元,是為內部類準備的

 

成員的內部類特點:
1.成員內部類屬於外部類的例項成員,成員內部類可以有public,private,default,
protected許可權修飾符。在成員內部類中訪問外部類的成員方法和屬性,要使用“外部
類名.this.成員方法”和“外部類名.this.成員屬性”的形式。
2.建立成員內部類的例項使用“外部類名.內部類名 例項名=外部類例項名.new 內部
類構造方法(引數)”的形式。
成員內部類的限制:
1.成員內部類不能與外部類重名
2.不能在成員內部類中定義static屬性、方法和類(static final形式的乘涼定義除外)因
為一個成員內部類例項必然與一個外部類例項關聯,static成員完全可以移到其外部類
去。

 

public class MemberInnerClassDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Outer1 outer1 = new Outer1();
		Outer1.Inner1 inner1 = outer1.new Inner1();
		outer1.outer();
		inner1.inner();
	}

}

class Outer1{
	private String name = "張三";
	private int num1 = 1;

	public void outer() {
		System.out.println(name+" "+num1);
		//System.out.println(num2);外部類不能直接訪問內部類成員
		Inner1 inner1 = new Inner1();//外部類可以例項化內部類,訪問內部類
		inner1.inner();
	}
	
	class Inner1{//如果內部類宣告為private型別,則外部無法訪問通過外部類內部類
		private String name = "李四";
		private int num2 = 2;
		//private static final int num3 = 3;在成員內部類中可以宣告靜態常量
		//private static int num3 = 3;在成員內部類中不能宣告靜態成員,包括屬性和方法
		public void inner() {
			System.out.println(name+" "+num2);
			System.out.println(Outer1.this.name+" "+Outer1.this.num1);//內部類呼叫外部類屬性
			outer();//內部類可以直接訪問外部類的屬性和方法,包括私有的
			Outer1.this.outer();//和上面的一樣,區別是如果內部類出現重名,那麼這樣可以解決
		}
	}
}

  

相關文章