0%

重写

OOP,看似简单的一个词,里面包含的东西实在是太多了,面向对象的三大属性:封装、继承、多态。

一、概念

  1. 重写:当一个父类和子类有一个方法,参数和名字完全一致,那么子类方法会覆盖父类的方法。
    • 子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
    • 子类中的方法参数一定要和父类保持一致,否则会报错(构造函数除外)

二、demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Person
{
public $name;
public $sex;
public $age;

public function __construct($name, $sex, $age)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}

public function say()
{
echo "名字:" . $this->name . ",性别:" . $this->sex . ",年龄:" . $this->age;
}
}

class Student extends Person
{
public $school;

public function __construct($name, $sex, $age, $school)
{
parent::__construct($name, $sex, $age);
$this->school = $school;
}

// public function say($test),报错:PHP Strict Standards: Declaration of Student::say() should be compatible with Person::say()
public function say()
{
// parent::say(); // 或Person::say();
echo "姓名:" . $this->name .",就读学校:" . $this->school;
}
}

// $p = new Person('张三','男',11);
// $p->say();

$s = new Student('张三','男',11,'北大');
$s->say();