JavaSE——面向對象:內部類

內部類:定義在一個類內部的類,也稱嵌套類。java

 

實例內部類:測試

實例內部類程序示例:this

import mypro01.Outter.Inner;

class Outter{	//外部類
	int age=2;
	String sex="mail";
	public void doWorkOut(){
		System.out.println("我是外部類方法");
	}
	
	class Inner{	//內部類
		
		int age=12;
		String name;
		public void doWorkIn(){	//內部類方法
			doWorkOut(); 	//內部類可直接訪問外部類方法
			
			//內部類訪問外部類同名和不一樣名成員的方法
			System.out.println("內部類可直接訪問外部類成員"+sex);
			System.out.println("內部類可訪問外部類同名成員age :"+Outter.this.age); 	
			System.out.println("內部類的age和name: "+this.age+" "+this.name);
		}
	}
}
public class InnerClass {

	public static void main(String[] args) {

		System.out.println("**************外部類對象測試*****************");
		Outter out1= new Outter();
		System.out.println(out1.age);
		System.out.println(new Outter().age);
		
		System.out.println("**************內部類對象測試*****************");
		Inner in1= new Outter().new Inner();	//內部類定義方法
		Inner in2=out1.new Inner();				//內部類定義方法
		System.out.println(in1.name);
		System.out.println(in2.name);
		System.out.println(in2.age);
		
		System.out.println("**************內部類方法測試*****************");
		in1.doWorkIn();
		
	}

}

實例內部類程序示例運行結果:code

**************外部類對象測試*****************
2
2
**************內部類對象測試*****************
null
null
12
**************內部類方法測試*****************
我是外部類方法
內部類可直接訪問外部類成員mail
內部類可訪問外部類同名成員age :2
內部類的age和name: 12 null

靜態內部類對象

靜態內部類程序示例:class

import mypro01.Outter.Inner;

class Outter{	//外部類
	int age=2;
	static String sex="mail";
	public void doWorkOut(){
		System.out.println("我是外部類非靜態方法");
	}
	
	static public void doWorkOut2(){
		
		System.out.println("我是外部類靜態方法");
	}
	
	static class Inner{	//內部類
		
		int age=12;
		String name;
		public void doWorkIn(){	//內部類方法
			
			//靜態內部類可直接訪問外部類靜態成員(字段和方法),但沒法直接訪問外部類非靜態成員。
			System.out.println("靜態內部類可直接訪問外部類靜態成員"+sex);
			doWorkOut2();
			
			//靜態內部類訪問外部類非靜態成員(字段和方法)時,需經過外部類實例去訪問。
			System.out.println("靜態內部類訪問外部類非靜態成員age :"+new Outter().age); 	
			new Outter().doWorkOut(); 	
			
			System.out.println("內部類的age和name: "+this.age+" "+this.name);
		}
	}
}
public class InnerClass {

	public static void main(String[] args) {

		System.out.println("**************外部類對象測試*****************");
		Outter out1= new Outter();
		System.out.println(out1.age);
		System.out.println(new Outter().age);
		
		System.out.println("**************內部類對象測試*****************");
		Inner in1= new Inner();	//靜態內部類在建立實例時,沒必要建立外部類實例
		Outter.Inner in2= new Outter.Inner();
		System.out.println(in1.name);
		System.out.println(in2.name);
		System.out.println(in2.age);
		
		System.out.println("**************內部類方法測試*****************");
		in1.doWorkIn();
		
	}

}

靜態內部類程序運行示例:import

**************外部類對象測試*****************
2
2
**************內部類對象測試*****************
null
null
12
**************內部類方法測試*****************
靜態內部類可直接訪問外部類靜態成員mail
我是外部類靜態方法
靜態內部類訪問外部類非靜態成員age :2
我是外部類非靜態方法
內部類的age和name: 12 null

局部內部類(注意區別局部內部類和成員內部類)程序

  • 局部內部類屬於方法中的類。
  • 成員內部類是屬於類中的類。

局部內部類程序示例:方法

局部內部類程序示例運行結果:im

匿名內部類

 

匿名內部類程序示例:

匿名內部類程序運行結果:

相關文章
相關標籤/搜索