OOP:可以/应该抽象类能够调用自己的抽象方法吗?

时间:2012-10-19 12:58:37

标签: java oop

实施例

abstract class Foobar
{

  abstract void myAbstractMethod();

  public void myConcreteMethod()
  {
      //busy code begin
      myAbstractMethod();
      // busy code complete
  }

class childClass extends FooBar
{

  @Override
  public myAbstractMethod()
  {
   //busy code to make abstract method, concrete
  }

}

这可以接受吗?这是正确的方法吗?这是一个糟糕的设计?

10 个答案:

答案 0 :(得分:6)

完全可以接受。例如,您不能以任何其他方式使用template method design pattern ..

答案 1 :(得分:2)

是的,你正确使用抽象类。

答案 2 :(得分:1)

是的,这是有道理的,也是可以接受的。

答案 3 :(得分:1)

抽象类调用自己的方法既合法又有用。

这是子类扩展抽象类行为的一种方法。

答案 4 :(得分:1)

你正在使用它,因为它应该被使用 - 整个抽象点是类知道方法在那里:)

答案 5 :(得分:1)

当然,这是抽象方法的主要优点之一:您在抽象类中提供了更大的进程,但是将其中的一部分推迟到子类。您调用抽象方法以允许子类填充其贡献。

答案 6 :(得分:1)

是。这是非常真实的。它表示您将抽象方法的实现责任委托给消费者,或者您可以说客户端,您仍在使用该方法。

事件监听器仅以这种方式实现,当我们不知道实现但仍然调用方法时假设客户端将以自己的方式处理事件。

答案 7 :(得分:1)

是的,这就是template method设计模式的工作原理,它允许子类覆盖算法的某些步骤,以允许不同子类上的不同行为。

答案 8 :(得分:0)

YES。

例如,你想要一个方法先做一些常见的工作,然后继续子类型(子类)的具体工作。

abstract class xxx{
public void work(){
  common1();
  common2();
  specific();
}

abstract void specific();

}

答案 9 :(得分:0)

这是可能的,我认为这是一个很好的方法。例如,抽象类 Stone 可能具有已实现的方法 getMass(),其中它调用自己的抽象方法 computeVolume() computeVolume()对于立方体或圆石来说会有所不同。