如果需要生成對外部類對象的引用,可以使用外部類的名字后面緊跟圓點和this,這樣產生的引用自動地具有正確的類型,這一點在編譯器就被知曉並受到檢查,因此並沒有運行時開銷
//: innerclasses/DotThis.java // Qualifying access to the outer-class object. package object; public class DotThis { void f() { System.out.println("DotThis.f()"); } public class Inner { public DotThis outer() { return DotThis.this; //這里生成了類DotThis的引用(inference) // A plain "this" would be Inner's "this" } } public Inner inner() { return new Inner(); } public static void main(String[] args) { DotThis dt = new DotThis(); DotThis.Inner dti = dt.inner(); dti.outer().f();//這里用類DotThis的引用(inference) 創建類DotThis的對象 } } /* Output: DotThis.f() *///:~
要去創建某個內部類的對象,必須字new表達式中提供其他外部類對象的引用,這就需要.new語法,必須使用外部類的對象來創建內部類
//: innerclasses/DotNew.java // Creating an inner class directly using the .new syntax. package object; public class DotNew { public class Inner {} public static void main(String[] args) { DotNew dn = new DotNew(); DotNew.Inner dni = dn.new Inner(); //這里利用DotNEW的對象生成內部類Inner的對象 //! DotNew.Inner dni = DotNew.new Inner(); //這樣不允許(allow) } } ///:~