繁体   English   中英

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

[英]OOP: Can/Should an Abstract class be able to call its own abstract method?

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
  }

}

这可以接受吗? 这是正确的方法吗? 这个设计不好吗?

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

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

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

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

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

您正在使用它,因为它应该被使用-抽象的全部要点是类知道方法存在:)

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

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

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

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

是。

例如,您要一个方法先执行一些常见的工作,然后再继续进行子类型(子类)的特定工作。

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

abstract void specific();

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM