如何在超类中定义方法但将实现留给子类?
问问题
558 次
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
}
}
注意:接口中的方法是自动的abstract
,public
与类中的方法不同,类中的方法默认是包私有的而不是抽象的。
于 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 回答