父类中不写这个方法可以吗?

反正子类中也是要重写的 为什么父类中还要定义这个方法?不写也是可以的吧?

abstract class ACanEat {
// 抽象方法需要在子类中实现
abstract public function eat($food);

public function breath(){

  echo "Breath use the air.<br />";

}
}

// Human类继承了ACanEat抽象类
class Human extends ACanEat {
// 跟Animal类的实现是不同的
public function eat($food){

echo "Human eating " . $food . "\n";

}
}

// Animal类继承了ACanEat抽象类
class Animal extends ACanEat {
public function eat($food){

echo "Animal eating " . $food . "\n";

}
}

$man = new Human();
$man->eat("Apple");
$man->breath(); // 和Animal共用了抽象类ACanEat的breath方法
$monkey = new Animal();
$monkey->eat("Banana");
$monkey->breath();

SMILET
浏览 719回答 5
5回答

宝慕林4294392

抽象类相当于模板的作用,其中定义的抽象方法用来强制子类实现。 eg.一个数据库连接的基类,必定需要声明一个abstract function connect(), 它的子类 例如 mysql,sql server 继承父类并分别实现各自连接的方法。

12345678_0001

父类中的抽象方法是共有的属性,每个animal都具有eat方法,当父类定义了之后,子类必须去实现。如果你觉得这个eat不是那么共有,也不可以不写,这样子可能有些子类就不具备eat这个功能。在父类中定义了抽象方法后,还有一个好处是你可以在父类中调用这个方法,在子类具体实现,这样不必要每次都在子类中去调用这个方法了。感觉好的话点赞哦~

喵喔喔

abstract类和interface类一般用过父类,用来约束子类,按照某种规范。

慕桂英3389331

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。 代码示例: <?php /** * Abstract Class for Animal */ abstract class AnimalAbstract{ abstract public function eat($food); public function run(){ echo "It's running..."; } } /** * Class for Dog */ class Dog extends AnimalAbstract{ public function eat($food){ echo "It's eating bones"; } } /** * Class for Cat */ class Cat extends AnimalAbstract { public function eat($food){ echo "It's eating fish"; } } 如子类不实现父类方法,则会报错。代码示例: class Dog extends AnimalAbstract{ // public function eat($food){ // echo "It's eating bones"; // } } 错误信息: Fatal error: Class Dog contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AnimalAbstract::eat) 官方原文:PHP抽象类

千巷猫影

抽象方法和接口方法主要作用是用于约束子类按照特定的软件结构实现,是软件架构强制实现的媒介,在多人的团队协作开发中起尤为重要,保证软件结构。
打开App,查看更多内容
随时随地看视频慕课网APP