1. 程式人生 > >java內部類之成員內部類

java內部類之成員內部類

cte 對象 todo 定義 包括 類屬性 out pri int

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

內部類的主要特點:
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();//和上面的一樣,區別是如果內部類出現重名,那麽這樣可以解決
		}
	}
}

  

java內部類之成員內部類