1

例子

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
  }

}

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

4

10 回答 10

6

完全可以接受。例如,您不能以任何其他方式使用模板方法设计模式。

于 2012-10-19T13:02:06.857 回答
2

是的,您正确使用了抽象类。

于 2012-10-19T12:59:54.717 回答
1

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

于 2012-10-19T13:00:18.397 回答
1

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

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

于 2012-10-19T13:01:26.933 回答
1

您正在使用它应该使用它 - 抽象的全部意义在于该类知道该方法存在:)

于 2012-10-19T13:01:54.713 回答
1

绝对,这是抽象方法的主要好处之一:您在抽象类中提供了一个更大的过程,但将其中的一部分推迟到子类中。您调用抽象方法以允许子类填写其贡献。

于 2012-10-19T13:02:29.663 回答
1

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

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

于 2012-10-19T13:03:16.117 回答
1

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

于 2012-10-19T13:10:58.850 回答
0

This is possible and I think this is good approach. For instance, an abstract class Stone may have the implemented method getMass() where it calls its own abstract method computeVolume(). computeVolume() would be different for the cube or for the round stone.

于 2012-10-19T13:09:36.603 回答
0

是的。

例如,你想让一个方法先做一些共同的工作,然后再继续进行子类型(sub-class)的具体工作。

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

abstract void specific();

}
于 2012-10-19T13:04:06.893 回答