2011-03-07 116 views
7

如果我有一個子類具有從父類重寫的方法,並且在非常特定的情況下我想使用原始方法,那麼如何調用這些方法?如何從子類調用重寫的父類方法?

+0

的可能重複(http://stackoverflow.com/questions/268929/in-java-how-to-i-call-a-base-class-method-from-the-overriding-method-in-a-deri) – 2011-03-07 22:00:10

回答

6

調用超級

class A { 
    int foo() { return 2; } 
} 

class B extends A { 

    boolean someCondition; 

    public B(boolean b) { someCondition = b; } 

    int foo() { 
     if(someCondition) return super.foo(); 
     return 3; 
    } 
} 
+0

不應該在類A中使用foo()方法是靜態的,這樣你可以像這樣調用它:super.foo()? – 2011-03-07 04:41:43

+3

@Eng不!靜態意味着很不同的東西。 – corsiKa 2011-03-07 04:43:22

6

這就是super是。如果重寫方法method,那麼你可能會實現這樣的:

protected void method() { 
    if (special_conditions()) { 
     super.method(); 
    } else { 
     // do your thing 
    } 
} 
2

通常你可以使用關鍵字super訪問父類的功能。 例如:[?在Java中,如何我所說的基類的從在派生類的覆蓋方法方法]

public class Subclass extends Superclass { 

    public void printMethod() { //overrides printMethod in Superclass 
     super.printMethod(); 
     System.out.println("Printed in Subclass"); 
    } 
    public static void main(String[] args) { 

    Subclass s = new Subclass(); 
    s.printMethod();  
    } 

} 

http://download.oracle.com/javase/tutorial/java/IandI/super.html兩者