匿名對象: 是指創建對象的時候,只有創建對象的語句,卻沒有把對象地址值賦給某個變數 創建一個普通對象: Person p = new Person(); 創建一個匿名對象: new Person(); 註意: 1.匿名對象只能使用一次 2.匿名對象可以作為參數傳遞 3.匿名對象可以當作方法的返回值 ...
匿名對象:
是指創建對象的時候,只有創建對象的語句,卻沒有把對象地址值賦給某個變數
創建一個普通對象:
Person p = new Person();
創建一個匿名對象:
new Person();
註意:
1.匿名對象只能使用一次
2.匿名對象可以作為參數傳遞
3.匿名對象可以當作方法的返回值
示例:
public class Demo { public static Person getPerson(){ //普通方式 //Person p = new Person(); //return p; //匿名對象作為方法返回值 return new Person(); } public static void method(Person p){} } public class Test { public static void main(String[] args) { //調用getPerson方法,得到一個Person對象 Person person = Demo.getPerson(); //調用method方法 Demo.method(person); //匿名對象作為方法接收的參數 Demo.method(new Person()); } }
內部類:
在類的內部定義類
什麼時候需要呢?比如,一個汽車,包含發動機,發動機就可以用內部類來描述
內部類的分類:成員內部類,局部內部類
成員內部類的建立和調用示例:
public class Outer { private int a = 1; //內部類可以使用外部類成員,包括私有 //外部類無法直接使用內部類變數,必須建立內部類對象 class Inner{ public void inner(){ System.out.println("內部類方法"+a); } } }
public class Test { public static void main(String[] args) { //內部類調用格式: Outer.Inner in = new Outer().new Inner(); in.inner(); } }
同名變數的調用問題:
public class Outer { int i = 1; class Inner{ int i =2; public void inner(){ int i = 3; System.out.println(i);//3 System.out.println(this.i);//2 System.out.println(Outer.this.i);//1 } } }
局部內部類:
把一個類寫在了一個方法裡面
調用方法相對複雜
示例:
public class Outer { public void out(){ class Inner{ public void inner(){ System.out.println("局部內部類方法"); } } Inner inner = new Inner(); inner.inner(); } }
public class Test { public static void main(String[] args) { new Outer().out(); } }
內部類的實際使用:
匿名內部類:
臨時定義某一指定類型的子類,定義後立即創建剛剛定義的這個子類對象
示例:
public interface Smoking { public abstract void smoking(); }
public class Test { public static void main(String[] args) { //固定格式 //實際上創建了介面的實現類,重寫方法 //這裡也可以這樣寫Smoking s = new Smoking() {}; //然後s.方法調用 new Smoking() { public void smoking() { System.out.println("人在吸煙"); } }.smoking(); //註意這個分號 } }