父類別定義的屬性,子類別可以直接用嗎?
可以
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();
}
}
不會 它們是不同的記憶體區塊,簡單來說 這件事等價於 在A物件中 NEW 了一個B物件 而A跟B物件中的命名不會衝突
暐翰大的說明很完整了,這邊做個補充:
物件導向的屬性和方法,都可以透過存取修飾子來控制是否被繼承
相信你有在一些程式看過諸如Public
、Private
等關鍵字,便是存取修飾子在作用
幾乎所有物件導向程式語言的Public
都是指「開放給所有外部呼叫端存取」,而Private
則是指「只限此類別存取」
然而還有其他關鍵字,如internal
、protected
、Friend
等,每家語言的實作可能不盡相同,學習該門語言時再多看文件即可