在Java中,父類和子類可能會存在同名的變量,這種情況下需要注意變量的作用域和訪問方式。
首先,我們需要了解一下兩種變量的定義方式:
// 父類變量 public class Parent { public int num = 10; } // 子類變量 public class Child extends Parent { public int num = 20; }
在上面的代碼中,父類定義了一個變量num,并且子類也定義了一個同名變量num。當子類訪問這個變量時,會優先訪問子類的變量。
但是,有時候我們需要訪問父類的同名變量怎么辦?這時可以使用super關鍵字。
// 子類訪問父類同名變量 public class Child extends Parent { public int num = 20; public void printNum() { System.out.println(num); // 輸出20 System.out.println(super.num); // 輸出10 } }
在上面的代碼中,我們定義了一個printNum方法,在方法中使用super關鍵字訪問了父類的同名變量。
需要注意的是,同名變量的作用域只限于當前類。也就是說,如果我們在子類中定義了一個局部變量和父類同名,那么局部變量會覆蓋父類和子類的同名變量。
// 子類局部變量覆蓋同名變量 public class Child extends Parent { public int num = 20; public void printNum() { int num = 30; System.out.println(num); // 輸出30 System.out.println(super.num); // 輸出10 } }
在上面的代碼中,我們在printNum方法中定義了一個局部變量num,并且和同名變量重名。此時,局部變量會覆蓋同名變量。
綜上所述,同名變量需要注意作用域和訪問方式,同時可以使用super關鍵字訪問父類的同名變量。