php面向对象——08继承

继承


定义

子类继承父类所有的——公有(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();  // 报错,函数不能被重写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值