super關鍵字在Java中有三種主要用途:1.使用super.變量名訪問父類成員變量,解決子類與父類變量名沖突;2.通過super()調用父類構造方法,必須位于子類構造方法的第一條語句;3.使用super.方法名()調用父類方法,適用于擴展或修改父類方法功能。這三種用法分別用于訪問父類屬性、初始化繼承屬性和擴展父類行為,是掌握java繼承機制的關鍵技能。
super 關鍵字主要用于訪問父類的成員變量、調用父類的構造方法和訪問父類的方法。掌握它對于理解和使用 Java 的繼承特性至關重要。
super 關鍵字在 Java 中就像一扇通往父類的門,讓我們能夠在子類中訪問和使用父類的東西。但具體怎么用,什么時候用?這就是我們需要深入探討的。
super 關鍵字的 3 種用法開發必備技能!
立即學習“Java免費學習筆記(深入)”;
如何在子類中訪問父類的成員變量?
當子類中定義了與父類同名的成員變量時,使用 super.變量名 可以明確訪問父類的成員變量。這在解決變量名沖突時非常有用。舉個例子,假設我們有一個 Animal 類和一個 Dog 類,它們都有一個 name 變量。
class Animal { String name = "Animal"; } class Dog extends Animal { String name = "Dog"; void printNames() { System.out.println("Dog's name: " + name); // 輸出 Dog 的 name System.out.println("Animal's name: " + super.name); // 輸出 Animal 的 name } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.printNames(); } }
這段代碼會輸出:
Dog's name: Dog Animal's name: Animal
這里,super.name 讓我們能夠訪問 Animal 類中的 name 變量,即使 Dog 類也有一個同名的變量。
如何在子類中調用父類的構造方法?
使用 super() 可以調用父類的構造方法。這通常用于在子類的構造方法中初始化從父類繼承的屬性。需要注意的是,super() 必須是子類構造方法中的第一條語句。
class Animal { String name; Animal(String name) { this.name = name; System.out.println("Animal constructor called with name: " + name); } } class Dog extends Animal { String breed; Dog(String name, String breed) { super(name); // 調用父類的構造方法 this.breed = breed; System.out.println("Dog constructor called with breed: " + breed); } } public class Main { public static void main(String[] args) { Dog dog = new Dog("Buddy", "Golden Retriever"); } }
這段代碼會輸出:
Animal constructor called with name: Buddy Dog constructor called with breed: Golden Retriever
可以看到,在 Dog 類的構造方法中,我們首先使用 super(name) 調用了 Animal 類的構造方法,初始化了 name 屬性,然后才初始化了 Dog 類自己的 breed 屬性。如果忘記調用 super(),或者把它放在了構造方法的其他位置,編譯器會報錯。
如何在子類中訪問父類的方法?
使用 super.方法名() 可以調用父類的方法。這在子類需要擴展或修改父類方法的功能時非常有用。例如,如果子類需要執行父類的方法,然后再執行一些額外的操作,就可以使用 super 關鍵字。
class Animal { void makeSound() { System.out.println("Generic animal sound"); } } class Dog extends Animal { @Override void makeSound() { super.makeSound(); // 調用父類的 makeSound 方法 System.out.println("Woof!"); // 擴展父類方法的功能 } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.makeSound(); } }
這段代碼會輸出:
Generic animal sound Woof!
這里,Dog 類的 makeSound 方法首先使用 super.makeSound() 調用了 Animal 類的 makeSound 方法,然后才輸出了 “Woof!”,實現了對父類方法的擴展。
super 和 this 的區別是什么?
super 和 this 都是 Java 中的關鍵字,但它們的作用完全不同。super 用于訪問父類的成員,而 this 用于訪問當前類的成員。super 可以用來調用父類的構造方法,而 this 可以用來調用當前類的其他構造方法。總的來說,super 關注的是繼承關系,而 this 關注的是當前對象。
什么時候應該使用 super 關鍵字?
當你需要在子類中訪問或使用父類的成員時,就應該使用 super 關鍵字。具體來說,以下幾種情況是使用 super 的常見場景:
- 當子類中定義了與父類同名的成員變量,需要明確訪問父類的成員變量時。
- 當需要在子類的構造方法中調用父類的構造方法時。
- 當子類需要擴展或修改父類方法的功能,需要在子類方法中調用父類方法時。
總之,super 關鍵字是 Java 繼承機制中一個非常重要的組成部分,掌握它可以幫助你更好地理解和使用 Java 的繼承特性。理解了 super,就能更好地駕馭 Java 的面向對象編程。