【问题标题】:How to implement a function in a class which may or may not be over-ridden in sub class?如何在子类中可能会或可能不会被覆盖的类中实现函数?
【发布时间】:2015-02-06 16:53:14
【问题描述】:

目前有一个类say A,它有final 方法say mainMethod(),它调用了三个方法a()、b() 和c()。现在,子类必须实现 a 和 b,所以我将它们抽象化。但可能不需要 c。我如何实现它?我正在使用 PHP。

【问题讨论】:

  • 请花时间提出一个实际的代码示例。由于问题是目前写的,很难确切地看到您遇到的问题,并且这里提出的解决方案可能无法解决您想要的问题。

标签: php oop inheritance


【解决方案1】:

只需创建一个空的非抽象方法,并在 cmets 中描述它可能会被覆盖。例如:

abstract class A 
{
    public abstract function a();
    public abstract function b();

    /**
     * This method may be overwritten for purpose X ...
     */
    public function c() 
    {
        /* empty */
    }
}

这样你就可以调用c(),它可能有也可能没有任何功能。继承类强制实现a()b(),可以选择性地覆盖c()。一个好的 php 编辑器,如 NetBeans 或任何能够进行代码提示的东西,其中还会显示注释,以便程序员了解函数的用途。

【讨论】:

  • 我也想过这个,但是留空方法是一种不好的做法。有没有其他办法?
  • 我既不认为这是不好的做法,也不认为还有其他方法。不能调用未定义的方法,也不能创建不需要实现的抽象方法。
  • 接口可能是执行a()b() 实现的更好工具
猜你喜欢
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多