在子类的超类中定义方法

cob*_*bie 1 java

如何在超类中定义方法,但将实现留给子类?

Rei*_*ica 5

离开方法abstract:

abstract class A {
    abstract void doStuff();
}

class B extends A {
    void doStuff() {
        // stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

注意...

如果类包含抽象方法,则必须声明类本身 abstract

无法构造抽象类(因此new A()会出错,但new B()会很好),并且子类需要实现所有抽象方法,除非它们也是抽象的.

abstract class A {
    abstract void doStuff();
}

abstract class B extends A {
    // This is fine since B is abstract
}

class C extends A {
    // This is an error since doStuff() isn't implemented
}
Run Code Online (Sandbox Code Playgroud)

使用抽象类,您可以混合使用抽象和常规方法:

abstract class A {
    abstract void doStuff();

    void doOtherStuff() {
        // Subclasses don't need to implement this
    }
}
Run Code Online (Sandbox Code Playgroud)

如果所有方法都是抽象的,那么使用a可能更有意义interface,因为类实现了多个接口:

interface DoesStuff {
    void doStuff();
}

interface DoesOtherStuff {
    void doOtherStuff();
}

class B implements DoesStuff, DoesOtherStuff {
    void doStuff() {
        // stuff
    }

    void doOtherStuff() {
        // other stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

注:在接口中的方法是自动abstractpublic,不像在类的方法,这是默认包私人和不是抽象的.