經典java題

今天遇到很“噁心”的一道題,說它“噁心”是因爲它很容易產生錯覺,題目如下:
public class Test {
    public static void main(String args[]) {       
        X  a=new X( ) {
        public void showX() {   
               System.out.println(a-b);
           }
       };
     a.showX();
    }
}
class X {
 int  a=5,b=3;
    public void showX() {      
        System.out.println(a+b);
    }       
}
初看這題,肯定有許多人都會說是輸出2,8或8之類的(剛看到題時,我也這麼想), 其實不然,那麼這道題關鍵就在於a.showX()的問題,是調用public void showX() {     System.out.println(a-b);    }還是public void showX() {     System.out.println(a+b);  }   了?還是兩者都調用了?java基礎稍微好的一點人都知道,題目設計到內部類的知識,而且是匿名內部類,匿名內部類的語法規則是new interfacename(){.......}或new superclassname(){......};有了這些我們就可以很明確的知道a 是匿名內部類的一個對象,所以a.showX()當然就是調用public void showX() {     System.out.println(a-b);    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章