1

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

4

4 回答 4

5

离开方法abstract

abstract class A {
    abstract void doStuff();
}

class B extends A {
    void doStuff() {
        // stuff
    }
}

注意...

如果一个类包含抽象方法,则必须声明该类本身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
}

使用抽象类,您可以混合使用抽象方法和普通方法:

abstract class A {
    abstract void doStuff();

    void doOtherStuff() {
        // Subclasses don't need to implement this
    }
}

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

interface DoesStuff {
    void doStuff();
}

interface DoesOtherStuff {
    void doOtherStuff();
}

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

    void doOtherStuff() {
        // other stuff
    }
}

注意:接口中的方法是自动的abstractpublic与类中的方法不同,类中的方法默认是包私有的而不是抽象的。

于 2012-10-24T21:28:38.713 回答
4

将超类设为abstract类并将方法定义为abstract强制子类提供实现(或)将自己设为abstract.

例子:

abstract class Super {
    abstract void absMethod();
}

class Sub extends Super {
    void absMethod() {
        // implementation
    }
}
于 2012-10-24T21:28:26.183 回答
1

您将在超类中创建一个抽象方法。

abstract class SuperClass {
   public abstract void mustImplement();
}

class SubClass extends SuperClass {
   public void mustImplement() {
       // Do stuff here
   }
}
于 2012-10-24T21:29:26.790 回答
1

它应该声明为抽象的。例如

abstract class MyBaseClass
{
  protected abstract void myMethod();
}


class MyChildClass extends MyBaseClass
{
  protected void myMethod()
  {
    // here is my implementation!
  }
}
于 2012-10-24T21:30:04.150 回答