簡體   English   中英

如何在Java中使用super?

[英]How do I use super in java?

public class A {

public void foo() {
System.out.println("A's foo");
    }
}



public class B extends A {
    public void foo() {
    System.out.print("B's foo");
    }
}



public  class Test1 {
public static void main(String[] args){
    A a= new B();
    a.foo();
  }
}

我想使用A的foo,這樣做的語法是什么? 我嘗試了a.super.foo();

謝謝

您只能從B類內部進行操作。 您將無法從AB類外部調用Afoo

A a= new B(); 將始終將引用a設置為B的實例。 因此,即使將其B.fooA ,在運行時調用的方法也是B.foo 那就是運行時多態。

對於需要執行此類操作的設計,我真的感到不安。 如果要讓對象表現得像A ,為什么要創建B

您不能從課程外部使用super 假設您確實 非常需要此方法(但我真的很懷疑您找不到更好的方法),對此,您可以做的最好的事情就是將執行此調用的方法公開給外部:

public class B extends A {
    public void super_foo() {
        super.foo();
    }
    public void foo() {
        System.out.print("B's foo");
    }
}

public  class Test1 {
    public static void main(String[] args){
        A a= new B();
        a.super_foo();
    }
}

就這個

    public class A {

    public void foo() {
    System.out.println("A's foo");
        }
    }



    public class B extends A {
        public void foo() {
        super.foo();
        System.out.print("B's foo");
        }
    }



public  class Test1 {
public static void main(String[] args){
    A a= new B();
    a.foo();
  }
}

如果該方法是靜態的,那么您想要實現的目標將起作用。 Java中的非虛擬方法

public class A {
    public static void foo() {
        System.out.println("A's foo");
    }
}

public class B extends A {
    public static void foo() {
        System.out.print("B's foo");
    }
}

public  class Test1 {
    public static void main(String[] args){
       A a= new B();
       a.foo();
    }
}

您無法訪問它。 關鍵字是它已被Java 覆蓋 ,因此不再可訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM