超类使用子类的方法?

时间:2014-02-27 16:00:12

标签: java class subclass superclass

我可以看到一个子类如何继承一个超类方法,但是如果超类想要使用该方法的子类版本呢?

3 个答案:

答案 0 :(得分:6)

在超类中,您需要抽象地定义方法。

示例:

abstract protected void doSomething();

然后@Override子类中的这个方法。

现在你的超类知道这个,并且可以调用它。

编辑,这也要求超类是抽象的,否则你不能在类上使用abstract方法。

答案 1 :(得分:1)

你的问题的一般答案是让你的超类自己调用一个可覆盖的方法。这是一个例子:

<强>超类

public class MyClass {

    // This method calls other (overridable) methods on itself
    public void run() {
            doSetup();
            doAction();
            doCleanup();
    }

    /** 
     * These three methods could be abstract if there's no default behavior
     * for the superclass to implement. In this example, these are concrete 
     * (not abstract) methods because there is a default behavior.
     */

    protected void doSetup() {
            System.out.println( "Superclass doSetup()" );
    }

    protected void doAction() {
            System.out.println( "Superclass doAction()" );
    }

    protected void doCleanup() {
            System.out.println( "Superclass doCleanup()" );
    }
}

儿童课

public class MySubclass extends MyClass {

    /**
     * Override a couple of the superclass methods to provide a different 
     * implementation.
     */

    @Override
    protected void doSetup() {
            System.out.println( "MySubclass doSetup()" );
    }

    @Override
    protected void doCleanup() {
            System.out.println( "MySubclass doCleanup()" );
    }
}

测试赛跑者

public class Runner {

    public static void main( String... args ) {

            MyClass mySuperclass  = new MyClass();
            mySuperclass.run();  // calls the superclass method, gets the superclass
                                 // implementation because mySuperclass is an instance 
                                 // of MyClass

            MyClass child = new MySubclass();
            child.run();  // calls the superclass method, gets the child class 
                          // implementation of overridden methods because child is 
                          // an instance of MySubclass
    }
}

有关使用此方法的设计模式的示例,请参阅Template method pattern

答案 2 :(得分:-1)

这是Template Method Pattern

的典型用例