1. 程式人生 > >內部類,區域性內部類與匿名內部類建立物件方法

內部類,區域性內部類與匿名內部類建立物件方法

內部類:

定義在A類中的B類就是內部類,B類在A類中的地位和其他成員相同,意思就是說可以相互呼叫 

優點:通過內部類可以讓java間接的實現多繼承

建立內部類的物件

方法一
先獲取內部類物件再呼叫方法
Outer out = new Outer();
外部類物件.new 內部類構造方法
Outer.Inner in = out.new Inner();
in.play();

方法二
藉助於外部類方法實現內部類方法的呼叫
Outer out = new Outer();
out.show();
class Outer{
	int age = 10;
	class Inner{//內部類
		int height =  20;
		public void play() {
			age+=10;
  	 System.out.println("Inner - play"+ age);
		}
	}
	
	public void show() {
		System.out.println("Outer - show");
		//相當於再使用Inner
		Inner in= new Inner();
		in.play();
	}
}

區域性內部類:

定義:在一個類中方法中的類

作用範圍:從定義它開始到所在方法的結束
作用:既保證了程式碼的私有化,又對程式碼進行了整理,增加了程式碼的可讀性,操作性

  •  形式:
class 外部類名{
    外部方法(){
        內部類名{
            內部方法(){
                
            }
        }
    }
}

匿名內部類

匿名內部類(物件):定義在一個類方法中的匿名子類 物件,屬於區域性內部類
匿名內部類的作用:用於類的私有化,只讓外部類看

研究匿名物件,匿名子類物件
class Text1 {
	public void text1Method() {
		System.out.println("text1Method");
	}
}

class SubText1 extends Text1 {
	public void text1Method() {
		System.out.println("SubText1-Method");
	}
}

建立匿名物件,完成方法的呼叫

new Text1().text1Method();

建立匿名子類物件

  •  方法一 使用已有的子類宣告子類物件,並呼叫方法
  •  應用場景:現成的子類可以用很多次,相同的功能需要多次使用的時候
new SubText1().text1Method();
  •  方法二:直接建立沒有名字的Text1類的匿名類物件
構成:new 父類的名字/父類介面的名字+()+{
    匿名子類的執行體
};
  •  場景:只能使用一次,使用完立即釋放,每次都使用不同的功能
Text1 t = new Text1() {
			// 重寫的Text1中的方法
			public void text1Method() {
				System.out.println("匿名");
			}

			// 子類特有的方法
			public void bark() {
				System.out.println("bark");
			}
		};

研究匿名內部類作為引數與返回值

作為引數

// 普通的匿名物件作為引數
	public void textCanshu1() {
		System.out.println(new Text1());
	}

	// 測試匿名內部類物件作為引數
	public void textCanshu2() {
		
		System.out.println(

				new Text1() {
					public String xiuxiuxiu() {
						System.out.println("嘟嘟嘟");
						// [email protected]
						return "dididi";
					}
				}.xiuxiuxiu());
	}

作為返回值

//普通的匿名物件充當返回值
	public Text1 textFanhuizhi1() {
		return new Text1();
	}
//匿名內部類充當返回值
	public Text1 textFnhuizhi2() {
		return new Text1() {
			public void xiuxiuxiu() {
				System.out.println("嘟嘟嘟");
			}
		};
	}