標籤:stat rac 引用 其他 static 捷徑 通過 類的成員 span
匿名對象的概念
匿名對象是指建立對象時,只有建立對象的語句,卻沒有把對象地址值賦值給某個變數。
public class Person{ public void eat(){ System.out.println();}}
建立一個普通對象
Person p = new Person();
建立一個匿名對象
new Person();
匿名對象的特點:
l 建立匿名對象直接使用,沒有變數名。
new Person().eat() //eat方法被一個沒有名字的Person對象調用了。
l 匿名對象在沒有指定其引用變數時,只能使用一次。
new Person().eat(); 建立一個匿名對象,調用eat方法
new Person().eat(); 想再次調用eat方法,重新建立了一個匿名對象
l 匿名對象可以作為方法接收的參數、方法傳回值使用
class Demo { public static Person getPerson(){ //普通方式 //Person p = new Person(); //return p; //匿名對象作為方法傳回值 return new Person(); } public static void method(Person p){}}class Test { public static void main(String[] args) { //調用getPerson方法,得到一個Person對象 Person person = Demo.getPerson(); //調用method方法 Demo.method(person); //匿名對象作為方法接收的參數 Demo.method(new Person()); }} 內部類
將類寫在其他類的內部,可以寫在其他類的成員位置和局部位置,這時寫在其他類內部的類就稱為內部類。其他類也稱為外部類。
在描述事物時,若一個事物內部還包含其他可能包含的事物,比如在描述汽車時,汽車中還包含這發動機,這時發動機就可以使用內部類來描述。
l 內部類的分類
內部類分為成員內部類與局部內部類。
我們定義內部類時,就是一個正常定義類的過程,同樣包含各種修飾符、繼承與實現關係等。在內部類中可以直接存取外部類的所有成員。
成員內部類
成員內部類,定義在外部類中的成員位置。與類中的成員變數相似,可通過外部類對象進行訪問
l 定義格式
class 外部類 {
修飾符 class 內部類 {
//其他代碼
}
}
l 訪問方式
外部類名.內部類名 變數名 = new 外部類名().new 內部類名();
l 成員內部類代碼示範
class Body {//外部類,身體 private boolean life= true; //生命狀態 public class Heart { //內部類,心臟 public void jump() { System.out.println("心臟噗通噗通的跳") System.out.println("生命狀態" + life); //訪問外部類成員變數}}}
訪問內部類
public static void main(String[] args) { //建立內部類對象 Body.Heart bh = new Body().new Heart(); //調用內部類中的方法 bh.jump();} 局部內部類
局部內部類,定義在外部類方法中的局部位置。與存取方法中的局部變數相似,可通過調用方法進行訪問
l 定義格式
class 外部類 {
修飾符 傳回值類型 方法名(參數) {
class 內部類 {
//其他代碼
}
}
}
l 訪問方式
在外部類方法中,建立內部類對象,進行訪問
l 局部內部類代碼示範
class Party {//外部類,聚會 public void puffBall(){// 吹氣球方法 class Ball {// 內部類,氣球 public void puff(){ System.out.println("氣球膨脹了");}}//建立內部類對象,調用puff方法new Ball().puff();}}訪問內部類public static void main(String[] args) { //建立外部類對象 Party p = new Party(); //調用外部類中的puffBall方法 p.puffBall();}
內部類的實際使用——匿名內部類
臨時定義某一指定類型的子類
定義後即刻建立剛剛定義的這個子類的對象
作用:匿名內部類是建立某個類型子類對象的捷徑。
格式:
new 父類或介面(){
//進行方法重寫
};
代碼示範:
//已經存在的父類:public abstract class Person{ public abstract void eat();}//定義並建立該父類的子類對象,並用多態的方式賦值給父類引用變數Person p = new Person(){ public void eat() { System.out.println(“我吃了”);}};//調用eat方法p.eat();
使用匿名對象的方式,將定義子類與建立子類對象兩個步驟由一個格式一次完成,。雖然是兩個步驟,但是兩個步驟是連在一起完成的。
匿名內部類如果不定義變數引用,則也是匿名對象
new Person(){
public void eat() {
System.out.println(“我吃了”);
}
}.eat();
JAVA-基礎-匿名對象-內部類