一道關於Java繼承的阿里面試題

下面代碼輸出的是什麼

public class Base
{
    private String baseName = "base";
    public Base()
    {
        callName();
    }

    public void callName()
    {
        System. out. println(baseName);
    }

    static class Sub extends Base
    {
        private String baseName = "sub";
        public void callName()
        {
            System. out. println (baseName) ;
        }
    }
    public static void main(String[] args)
    {
        Base b = new Sub();
    }
}

A、base B、sup C、null

答案選C
new Sub();在創造派生類的過程中首先創建基類對象,然後才能創建派生類。
創建基類即默認調用Base()方法,在方法中調用callName()方法,由於派生類中存在此方法,則被調用的callName()方法是派生類中的方法,此時派生類還未構造,所以變量baseName的值爲null

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