为了账号安全,请及时绑定邮箱和手机立即绑定

求老师、大神 解释

class Truck extends Car{

   function  __construct(){

       $this->speed +=50;

   }

}


正在回答

4 回答

你这是构造函数,我个人认为,根据题意说要覆盖speedUp函数,应该这样写,

public function speedUp(){
        $this->speed+=50;
        return $this->speed;
    }

我认为这样是实现了函数覆盖,但答案说结果为60我就实在不能理解,在答案区也见不到此类回答。我百度一下PHP的覆盖方法,得到如下结果,

所谓覆盖,从本质上来说就是重写。就是当子类继承父类的一些方法后,子类又在其内部定义了相同的方法,则这个新定义的方法会覆盖继承而来的父类的方法,子类只能调用其内部定义的方法。

有以下几点要求:

1.当一个父类和子类有一个方法,参数和名字完全一致,那么子类方法会覆盖父类的方法。

2.在实行方法覆盖的时候,访问修饰符可以是不一样的,但是子类的访问范围必须大于等于父类的访问范围。

3.要求参数和名字一样。并不是要求子类,父类名称相同。

综上,我觉得我这种做法才是实现了覆盖,希望能对你有所帮助。

1 回复 有任何疑惑可以回复我~
#1

qq_醉卧寒窗听雨眠_0

我认为出题者是想着先调用父类方法之后在调用子类方法,我和你的想法差不多, 不过在子类方法中加上了父类方法的调用。直接使用了parent调用父类的方法。感觉使用构造方法虽然结果正确,但是不符合出题者思维。
2017-07-26 回复 有任何疑惑可以回复我~
#2

该用户已注册

我也觉得你是对的,如果非要咬字眼的话,累加50,可能是在原来的基础上加50,也就是先调用父的,再加50
2017-09-26 回复 有任何疑惑可以回复我~
<?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


1 回复 有任何疑惑可以回复我~

Truck 是Car的子类,$this->speed指针指向Truck类的speed,也就是父类的speed,因为是继承来的嘛。然后就是把speed累加50.

1 回复 有任何疑惑可以回复我~

表示类Truck继承了Car,并给它写了一个构造函数,在函数里将speed的值加50


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181823    人
  • 解答问题       2577    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程

求老师、大神 解释

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信