內部類面試題(二)
阿新 • • 發佈:2018-12-26
以下程式碼執行結果是什麼? public class BwfOuterClass { private int x = 1; private int y = 2; private class BwfInnerClass{ private int x = 3; public void print(){ System.out.println("x+y="+(x+y) ); } } public static void main(String[] args) { new BwfOuterClass().new BwfInnerClass().print(); } }
答案:
x+y=5
解析:
在Java中,可以將一個類定義在另一個類裡面或者一個方法裡面,這樣的類稱為內部類。廣泛意義上的內部類一般來說包括這三種:成員內部類、區域性內部類、匿名內部類,如下圖所示:
本題考的是成員內部類。成員內部類是最普通的內部類,它的定義為位於另一個類的內部,類似於一個成員屬性。可以使用修飾符private、default、protected、public。
本題中BwfInnerClass是BwfOuterClass的成員內部類,成員內部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態成員)。但是值得注意的是,當成員內部類擁有和外部類同名的成員變數或者方法時,預設情況下訪問的是成員內部類的成員。如果要訪問外部類的同名成員,需要以下面的形式進行訪問:
外部類.this.成員變數
外部類.this.成員方法
本題中,如果把print方法做如下修改:
public void print(){
System.out.println("x+y=" + (BwfOuterClass.this.x+y));
}
則輸出結果為:x+y=3