求老师、大神 解释
class Truck extends Car{
function __construct(){
$this->speed +=50;
}
}
class Truck extends Car{
function __construct(){
$this->speed +=50;
}
}
2017-06-02
你这是构造函数,我个人认为,根据题意说要覆盖speedUp函数,应该这样写,
public function speedUp(){ $this->speed+=50; return $this->speed; }
我认为这样是实现了函数覆盖,但答案说结果为60我就实在不能理解,在答案区也见不到此类回答。我百度一下PHP的覆盖方法,得到如下结果,
所谓覆盖,从本质上来说就是重写。就是当子类继承父类的一些方法后,子类又在其内部定义了相同的方法,则这个新定义的方法会覆盖继承而来的父类的方法,子类只能调用其内部定义的方法。
有以下几点要求:
1.当一个父类和子类有一个方法,参数和名字完全一致,那么子类方法会覆盖父类的方法。
2.在实行方法覆盖的时候,访问修饰符可以是不一样的,但是子类的访问范围必须大于等于父类的访问范围。
3.要求参数和名字一样。并不是要求子类,父类名称相同。
综上,我觉得我这种做法才是实现了覆盖,希望能对你有所帮助。
<?php class Car { public $speed = 0; //汽车的起始速度是0 public function speedUp() { $this->speed += 10; return $this->speed; } } // 定义继承于Car的Truck类 class Truck extends Car{ // 构造函数,类被实例化的时候立即执行构造函数 function __construct(){ $this->speed += 50; // 类的属性(speed)增加50,如果在当前类中没有找到属性(speed)就去父类Car中寻找 } } $car = new Truck();// 实例化Truck类 $car->speedUp(); // 调用类方法speedUp();如果在当前类中没有找到方法(speedUp)就去父类Car中寻找 echo $car->speed; // 输出类的属性(speed):60
举报