2011-03-07 81 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两者