java靜態內部類

biubiubiuo發表於2018-02-20

靜態內部類特點:
1.使用static修飾的成員內部類是靜態內部類
2.靜態內部類和外部類沒有任何關係,只是在生成類名和類定義時有影響。靜態內部類可以看做是與外部類平級的類。使用方法與外部類平級的類完全相同。
3.建立靜態內部類的例項使用 外部類名.內部類名 例項名 = new 外部類名.內部類名(引數)
靜態內部類有以下限制:
1.靜態內部類不能與外部類重名
2.靜態內部類不能訪問外部類的非靜態的屬性和方法。外部類不能夠訪問內部類的非靜態屬性和方法。

public class StaticInnerClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Outer1.Inner1 inner = new Outer1.Inner1();//構造靜態內部類物件
		inner.inner();
		System.out.println("*******************");
		Outer1 outer = new Outer1();
		outer.outer();
	}

}
class Outer1{
	private String name = "張三";
	private int num1 = 1;
	private static int num3 = 100;
	public void outer() {
		System.out.println(name+" "+num1);
		Inner1 inner1 = new Inner1();
		inner1.inner();
		System.out.println(inner1.name);//可以呼叫靜態內部類,需要建立物件
		System.out.println(Inner1.num2);
		System.out.println(Inner1.num3);
	}
	
	public static class Inner1{
		private String name = "李四";
		private static int num2 = 2;
		private static int num3 = 99;
		public void inner() {
			System.out.println(name+" "+num2);
			//System.out.println(Outer1.this.name+" "+Outer1.this.num1);
			//靜態內部類不能訪問外部類的非靜態成員
			//outer();
			//Outer1.this.outer();
			System.out.println(num3);
			//System.out.println(Outer1.this.num3);
			System.out.println(Outer1.num3);//靜態內部類呼叫外部類成員不用this.的方式,直接去掉
		}
	}
}

  

相關文章