內部類,區域性內部類與匿名內部類建立物件方法
阿新 • • 發佈:2018-12-26
內部類:
定義在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("嘟嘟嘟");
}
};
}