iT邦幫忙

0

Java 繼承中,父類別定義的屬性,子類別可以直接用嗎?

s_h 2020-08-06 18:40:58790 瀏覽

關於Java 的繼承
父類別定義的方法,子類別可直接用,或overriding,或overloading.
問題:父類別定義的屬性,比如 int a=10
子類別可以直接調用嗎?
supper.a?
如果子類別重新定義int a=5,會有什么衝突?

7
暐翰
iT邦大師 1 級 ‧ 2020-08-07 09:18:53
最佳解答

父類別定義的屬性,子類別可以直接用嗎?

可以

supper.a?

子類別重新定義int a=5,會有什么衝突?

假如overide getter setter沒有super關鍵字以子類別的屬性為準

public class Demo{
    public static class A{
        int a = 10;
        public int GetA(){
            return a;
        }
    }

    public static class B extends A{
        int a = 20;
        @Override
        public int GetA(){
            return a;
        }
        public void execute(){
            System.out.println(a);              //20
            System.out.println(this.a);         //20
            System.out.println(super.a);        //10
            System.out.println(GetA());         //20
            System.out.println(this.GetA());    //20
            System.out.println(super.GetA());   //10
        }
    }    
    public static void main(String[] arr) {
        Demo.B b = new Demo.B();
        b.execute();
    }
}

xxx

1
e6319a5b
iT邦新手 5 級 ‧ 2020-08-06 22:42:22

不會 它們是不同的記憶體區塊,簡單來說 這件事等價於 在A物件中 NEW 了一個B物件 而A跟B物件中的命名不會衝突

4
打狗松鼠
iT邦新手 4 級 ‧ 2020-08-07 09:54:13

暐翰大的說明很完整了,這邊做個補充:
物件導向的屬性和方法,都可以透過存取修飾子來控制是否被繼承

相信你有在一些程式看過諸如PublicPrivate等關鍵字,便是存取修飾子在作用
幾乎所有物件導向程式語言的Public都是指「開放給所有外部呼叫端存取」,而Private則是指「只限此類別存取」
然而還有其他關鍵字,如internalprotectedFriend等,每家語言的實作可能不盡相同,學習該門語言時再多看文件即可

s_h iT邦新手 5 級 ‧ 2020-08-07 18:33:52 檢舉

感謝補充

我要發表回答

立即登入回答