在Java中,當子類和父類定義了同名變量時,就會產生變量隱藏的問題。子類會隱藏父類的同名變量,這意味著當子類修改了變量的值時,父類的同名變量的值不會跟著改變。
public class Parent { protected int num = 10; } public class Child extends Parent { private int num = 5; public void printNum() { System.out.println(num); // 輸出子類定義的num,即5 System.out.println(super.num); // 輸出父類定義的num,即10 } }
在上面的代碼中,子類Child定義了一個私有變量num,它和父類Parent中的num同名。在Child類的printNum方法中,輸出了Child類中定義的num和Parent類中定義的num。由于子類會隱藏父類中的同名變量,所以輸出的結果分別為5和10。
如果想在子類中訪問父類中被隱藏的同名變量,可以使用super關鍵字來調用父類中的變量。
public class Child extends Parent { private int num = 5; public void printNum() { System.out.println(num); // 輸出子類定義的num,即5 System.out.println(super.num); // 輸出父類定義的num,即10 } public void setNum(int num) { this.num = num; super.num = num; // 修改父類中的同名變量 } }
在上面的代碼中,Child類中新增了一個修改同名變量的方法setNum。當調用這個方法修改變量值時,需要使用this關鍵字來訪問Child類中的同名變量,并使用super關鍵字來訪問父類中的同名變量。