继承是指子类继承父类所有公有的和受保护的属性和方法。继承关键字 extends,派生类和子类是指继承于基类的类,基类、父类和超类是指被继承的类。
TIPS
- 子类只能继承父类的非私有属性。
- 子类继承父类后,相当于将父类的属性和方法copy到子类,可以直接使用$this调用该属性;
- PHP只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承(即A继承于B,而C又继承于A,C通过A间接继承了B)
<?php
class Dad
{
public $a = 'public';
protected $b = 'protected';
private $c = 'private';
public function func1(){
echo 'public func';
}
protected function func2(){
echo 'protected func';
}
private function func3(){
echo 'private func';
}
}
class Son extends Dad
{ //Son类就拥有了所有Dad类的属性和方法,增加父类的扩展性
//protected子类可以被继承,但不能被外部调用,private子类没有被继承,找不到属性或方法
public function test(){
$this->func1();
$this->func2();
}
}
$obj = new Son();
echo $obj->test();
方法重写
定义:继承父类中的方法,子类中定义的与父类同名的方法。当一个子类重写其父类中的方法时,PHP不会调用父类中已被重写的方法。
可以使用关键字 parent:: 访问父类中的被重写的方法
<?php
class Dad
{
public function byte(){
echo 'abcd';
}
}
class Son extends Dad
{
public function byte(){
echo 'efgh';
}
public function test(){
$this->byte();
parent::byte();
}
}
$obj = new Son();
echo $obj->byte();
$obj->test();
如果父类中的方法被声明为final,则子类无法重写该方法。如果一个类被声明为final,则不能被继承。
<?php
//final class Dad final 修饰类,则该类不能被继承
class Dad
{
final public function test(){ //final 声明之后不能被重写
echo 'hello world';
}
}
class Son extends Dad
{
public function test(){
echo 'I\'m fine';
}
}
$obj = new Son();
$obj->test();
发表评论