继承
定义
子类继承父类所有的——公有(public) 和 受保护(protected)属性和方法。
使用关键字extends
继承,一个类集成另一个,不能继承多个。
相关专业名词
子类、父类、基类、超类、派生类
子类、派生类 ——> 继承于基类的类;
父类、基类、超类指 ——> 被继承的类。
例子
<?php
class Father
{
public $a = 'public';
protected $b = 'protected';
private $c = 'private';
public function func1()
{
echo 'This is public function','<br/>';
}
protected function func2()
{
echo 'This is protected function','<br/>';
}
private function func3()
{
echo 'This is private function','<br/>';
}
}
// 继承父类
class Child extends Father
{
// 子类中调用继承来的方法
public function test()
{
$this -> func1();
$this -> func2();
//$this -> func3(); 私有方法不可以调用
}
}
// 实例化子类
$son = new Child();
// 尝试调用属性
echo $son -> a,'<br/>';
//echo $son->b; 不能直接输出b
//echo $son -> c; 继承都没继承,当然不能输出
// 尝试调用方法
//$son -> func1();
//$son -> func2(); 不能在类外调用func2
//$son -> func3(); 继承都没继承,当然不能调用
// 间接调用继承自父类的普通方法
$son -> test();
重写
定义:
1)继承父类的方法,子类中定义与父类同名的方法,且参数个数相同;
2)当子类重写父类中的方法时,php不会调用父类中被重写的方法;
3)是否调用父类的方法,取决于子类。
4)在实行方法覆盖的时候,访问修饰符可以是不一样的,但是子类的访问范围必须大于等于父类的访问范围。
使用:
parent:: 访问父类中被重写的属性和方法
例子
<?php
class Father
{
public function shuo($num)
{
echo 'a a o o';
}
}
class Son extends Father
{
public function shuo($num)
{
// 调用父类中被重写的方法
// parent::shuo($num);
echo 'Hello World';
}
public function test($num)
{
parent::shuo($num);
}
}
// 实例化子类
$son1 = new Son();
$son1 -> shuo(1); // Hello World
$son1 -> test(1); // a a o o
final关键字
如果父类中的方法被声明为final,则子类无法复写该方法。
如果一个类被声明为final,则不能被继承。
例子
<?php
class Father
{
final public function test()
{
echo 'hello';
}
}
class Son extends Father
{
public function test()
{
echo '你好';
}
}
// 实例化子类
$son1 = new Son();
$son1 -> test(); // 报错,函数不能被重写