推薦答案
在 Java 中,`super` 關(guān)鍵字只能用于引用直接父類的成員和構(gòu)造方法,無(wú)法直接引用父類的父類。`super` 關(guān)鍵字只能訪問(wèn)當(dāng)前類的直接父類的成員,而無(wú)法跨越多個(gè)繼承層級(jí)訪問(wèn)更高層次的父類。
如果要訪問(wèn)父類的父類(即祖父類)的成員,可以通過(guò)在父類中定義方法來(lái)實(shí)現(xiàn)間接訪問(wèn)。子類通過(guò)調(diào)用父類的方法,再由父類方法中使用 `super` 關(guān)鍵字訪問(wèn)父類的父類成員。
例如:
class Grandparent {
public void grandparentMethod() {
System.out.println("Grandparent method");
}
}
class Parent extends Grandparent {
public void parentMethod() {
System.out.println("Parent method");
}
public void accessGrandparentMethod() {
super.grandparentMethod();
}
}
class Child extends Parent {
public void childMethod() {
System.out.println("Child method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.childMethod(); // 輸出: Child method
child.parentMethod(); // 輸出: Parent method
child.accessGrandparentMethod(); // 輸出: Grandparent method
}
}
在上述示例中,`Child` 類通過(guò)繼承和調(diào)用父類的方法,間接訪問(wèn)了 `Grandparent` 類中的成員方法 `grandparentMethod()`。
其他答案
-
對(duì)于Java語(yǔ)言中的繼承關(guān)系而言,super關(guān)鍵字可以用來(lái)引用父類的成員變量、方法和構(gòu)造方法。它通常是在子類中使用,表示對(duì)于當(dāng)前對(duì)象的父類對(duì)象的引用。同時(shí),在父類和子類中都可以使用super關(guān)鍵字,一般用來(lái)解決重名變量或方法的調(diào)用問(wèn)題。在Java中,子類可以繼承父類中的屬性和方法,而且還可以在子類中新增屬性和方法。在此過(guò)程中,如果父類中存在與子類中方法或?qū)傩酝那闆r,super關(guān)鍵字就可以派上用場(chǎng)了。使用super可以讓子類訪問(wèn)到被隱藏的父類方法和成員變量,避免了命名沖突和混淆。通常情況下,super關(guān)鍵字只能指代直接的父類。因?yàn)樵诶^承關(guān)系中,子類只能繼承父類的成員,無(wú)法繼承父類的父類的成員。換句話說(shuō),父類的父類中定義的屬性和方法在子類中是無(wú)法直接訪問(wèn)的。不過(guò),如果是多層繼承關(guān)系,子類可以通過(guò)super關(guān)鍵字來(lái)訪問(wèn)間接父類的成員變量和方法。這種間接繼承的方式,實(shí)現(xiàn)了在多層繼承中訪問(wèn)不同父類的成員變量和方法的需求。
-
不可以。super關(guān)鍵字只能用來(lái)引用直接父類的成員變量、成員方法或構(gòu)造方法,不能直接引用父類的父類的成員。如果要使用父類的父類(即祖先類)的成員,可以通過(guò)在父類中使用super關(guān)鍵字來(lái)訪問(wèn)父類的成員,以此類推,逐級(jí)往上訪問(wèn)祖先類的成員。比如在子類中,使用super關(guān)鍵字可以訪問(wèn)直接父類的成員,在父類的方法中使用super關(guān)鍵字可以訪問(wèn)祖先類的成員。
