OOP抽象类何时实现抽象方法

Sta*_*ays 5 php oop abstract-class

我正在尝试用PHP学习OOP,现在我已经达到了抽象类.

我有一些问题,理解何时应该在抽象类中实现抽象方法,何时不应该.

例如,有这个代码:

<?php

abstract class concept_car {
    /**
     * Properties can not be declared as abstract natively:
     * http://stackoverflow.com/questions/7634970/php-abstract-properties
     */
    protected $weelNum  = NULL;
    protected $doorsNum = NULL;
    protected $color    = NULL;
    protected $carType  = NULL;
    // the inheritance class must define this methods
    abstract public function setWeelNum($weelNum);

    abstract public function setDoorsNum($doorsNum);

    abstract public function setCarType($carType);
}
Run Code Online (Sandbox Code Playgroud)

我不知道将3个方法声明为抽象是否可以,或者我应该删除抽象并实现它们,因为属性与方法属于同一个类.

在代码的实际形式中,我认为我必须在这里将方法声明为抽象,并在子类中的继承类中实现它们,但我不知道这是否是正确的方法.

PS:我是一名初学者,我正在努力了解情况如何,我还没有达到设计模式,所以请在概念中解释我,以便我知道什么是正确的方法.

Ste*_*roz 7

你必须问自己一个简单的问题:

扩展这个的所有类都做同样的事情吗?

对于这个例子,答案是肯定的,他们都会这样做

public function setWeelNum($weelNum) {
  $this->weelNum = $weelNum;
}
Run Code Online (Sandbox Code Playgroud)

所以不要在每个类中复制/粘贴代码,这没有意义.

什么时候应该声明一个抽象方法?

当该类的所有孩子必须以不同的方式实施这种方法时.

例如,在课堂上Animal,你会有一个public abstract function move();因为所有动物都在移动,但你不知道究竟是怎么回事.

  • `当那个类的所有孩子都必须以不同的方式实现这个方法时.我会说这是一个接口的情况,而不是一个抽象类. (3认同)