Java父子類在生成對象時的屬性關係

今天遇到這樣一道選擇題:
以下程序運行結果是()

public class Child extends Father {
    public  String name = "child";

    public static void main(String[] args) {
        Child c = new Child();
        System.out.println(c.getName());
    }
}

class Father {
    public String name = "father";

    public String getName() {
        return name;
    }
}

A: father B:child C:編譯出錯 D:運行出錯,無輸出
編譯結果是:father

Java編程思想講繼承語法時說,子類繼承父類,會自動得到父類中所有的域和方法。
不知道是不是中文版翻譯跟原意有區別,我的理解是子類繼承父類,子類可以訪問父類的屬性和方法(同時受到訪問權限的限制),而不是得到。
可分爲以下四種情況討論:
1、子類沒有重寫父類的方法,調用父類的方法訪問一個屬性,訪問的是父類的屬性,因爲調用的是父類的方法。

public class Child extends Father {
    public  String name = "child";

    public static void main(String[] args) {
        Child c = new Child();
        System.out.println(c.getName());
    }
}

class Father {
    public String name = "father";

    public String getName() {
        return name;
    }
}

輸出:father

2、子類重寫父類的方法,調用此方法訪問一個屬性,訪問的是子類的屬性,因爲此時調用的方法是子類的方法,只有當子類不存在此方法時,纔會去父類中尋找

public class Child extends Father {
    public  String name = "child";

    public String getName() {
        return name;
    }

    public static void main(String[] args) {
        Child c = new Child();
        System.out.println(c.getName());
    }
}

class Father {
    public String name = "father";

    public String getName() {
        return name;
    }
}

輸出:child
3、父子類中有相同的屬性,若要調用父類的屬性,則需要使用super.屬性 來調用父類中的屬性

public class Child extends Father {
    public  String name = "child";

    public String getName() {
        return super.name;
    }

    public static void main(String[] args) {
        Child c = new Child();
        System.out.println(c.getName());
    }
}

class Father {
    public String name = "father";

    public String getName() {
        return name;
    }
}

輸出:father
4、若子類沒有該屬性,則在子類中調用重寫的方法訪問屬性,調用的是父類屬性,不需顯示使用 super.屬性 來調用

public class Child extends Father {
    //public  String name = "child";

    public String getName() {
        return name;
    }

    public static void main(String[] args) {
        Child c = new Child();
        System.out.println(c.getName());
    }
}

class Father {
    public String name = "father";

    public String getName() {
        return name;
    }
}

輸出:father

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