反正子类中也是要重写的 为什么父类中还要定义这个方法?不写也是可以的吧?
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();
5 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
抽象类相当于模板的作用,其中定义的抽象方法用来强制子类实现。
eg.一个数据库连接的基类,必定需要声明一个abstract function connect(), 它的子类 例如 mysql,sql server 继承父类并分别实现各自连接的方法。
12345678_0001
TA贡献1802条经验 获得超5个赞
父类中的抽象方法是共有的属性,每个animal都具有eat方法,当父类定义了之后,子类必须去实现。如果你觉得这个eat不是那么共有,也不可以不写,这样子可能有些子类就不具备eat这个功能。
在父类中定义了抽象方法后,还有一个好处是你可以在父类中调用这个方法,在子类具体实现,这样不必要每次都在子类中去调用这个方法了。
感觉好的话点赞哦~
慕桂英3389331
TA贡献2036条经验 获得超8个赞
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。
代码示例:
<?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抽象类
- 5 回答
- 0 关注
- 718 浏览
添加回答
举报
0/150
提交
取消