首页  >  文章  >  后端开发  >  php面向对象之继承

php面向对象之继承

不言
不言原创
2018-06-06 10:10:311550浏览

这篇文章主要介绍了关于php面向对象之继承,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

继承

定义

子类继承父类所有的——公有(public)  和   受保护(protected)属性和方法

使用关键字extends继承,一个类集成另一个,不能继承多个。

相关专业名词

子类、父类、基类、超类、派生类

子类、派生类 ——> 继承于基类的类;

父类、基类、超类指 ——> 被继承的类。

例子

<?php

class Father
{
    public $a = &#39;public&#39;;
    protected $b = &#39;protected&#39;;
    private $c = &#39;private&#39;;

    public function func1()
    {
        echo &#39;This is public function&#39;,&#39;<br/>&#39;;
    }

    protected function func2()
    {
        echo &#39;This is protected function&#39;,&#39;<br/>&#39;;
    }

    private function func3()
    {
        echo &#39;This is private function&#39;,&#39;<br/>&#39;;
    }
}

// 继承父类
class Child extends Father
{
    // 子类中调用继承来的方法
    public function test()
    {
        $this -> func1();
        $this -> func2();
        //$this -> func3();  私有方法不可以调用
    }
}

// 实例化子类
$son = new Child();


// 尝试调用属性
echo $son -> a,&#39;<br/>&#39;;
//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 &#39;a a o o&#39;;
    }
}


class Son extends Father
{
    public function shuo($num)
    {
        // 调用父类中被重写的方法
        // parent::shuo($num);

        echo &#39;Hello World&#39;;
    }

    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 &#39;hello&#39;;
    }
}

class Son extends Father
{
    public function test()
    {
        echo &#39;你好&#39;;
    }
}

// 实例化子类
$son1 = new Son();

$son1 -> test();  // 报错,函数不能被重写

相关推荐:

php面向对象之重载

php面向对象之封装

           

以上是php面向对象之继承的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn