PHP面向对象(三):继承与多态

1、继承

    继承性:B类的对象拥有A类的全部属性与行为,称作B对A类的继承。

    好处:

    1:提高了代码的复用性。

    2:让类与类之间产生了关系,提供了另一个特征多态的前提

    弊端:

    打破了封装性。对于一些类,或者类中功能,是需要被继承,或者复写的。

这时如何解决问题呢?介绍一个关键字,final:最终。

1)、final关键字

      1:如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

      2:属性不能被定义为 final,只有类和方法才能被定义为 final。

2)、PHP只能单继承

        1:继承:不同于 Java 等语言,在 PHP 中,一个类只能直接从一个类中继承数据,即单继承。

        2:使用 extends 关键字来定义类的继承:class 子类 extends 父类{}

3)、三种访问控制修饰符

         public 表示全局,本类内部,类外部,子类都可以访问

         protected 表示受保护的,只有本类或子类可以访问

         private 表示私有的,只有本类内部可以访问

4)、重载与覆盖的区别

      函数的重载:发生在同一个类中,与什么父类子类毫无关系,只是函数名相同,但参数(个数,类型)不同,他们之间毫无关系。

       函数的覆盖(重写):发生在子类中,必须有继承,父类被覆盖时,函数名和参数要和父类中完全一样。

5)、构造方法与析构方法

①、构造方法

1:构造方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct() 。

2:在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。该方法无返回值。

3:PHP 不会在本类中自动的调用父类的析构方法。要执行父类的构造方法,必须在子类的构造方法体中手动调用 parent::__construct() 。

作用一:初始化任务:

作用二:传参

子类中调用父类的构造方法:parent::_construct();

②、析构方法:

1:与构造方法对应的就是析构方法,析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。析构函数不能带有任何参数,其名称必须是 __destruct() 。

2:和构造方法一样,PHP 不会在本类中自动的调用父类的析构方法。要执行父类的析构方法,必须在子类的析构方法体中手动调用 parent::__destruct() 。

3:试图在析构函数中抛出一个异常会导致致命错误

析构方法是在对象被销毁的时候,也可以手动销毁一个对象:unset()

2、多态性:

面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。

1.定义: 所谓多态,就是指一个引用(类型)在不同的情况下的多种状态。也可以理解为,多态是指通过指向父类的指针,来调用在不同子类中实现的方法。

2.多态存在的三个必要条件

一、要有继承;

二、要有重写;

三、父类引用指向子类对象。

【注】重写:也就是覆盖,子类中覆盖父类的方法,函数名和参数都和父类的一样。

1)、java 中的多态:

1.Java中多态的分类:

在java中,多态大致可以分为以下几种情况:

1)person为父类,student为子类。那么:person p =new student();

2)fliable为接口,bird为实现接口的类,那么:fliable f =new bird();

3)fliable为抽象类,bird为继承fliable的类,那么:fliable f =new bird();

【案例】

2)、PHP中的多态

Php是弱类型语言,$obj可以是任何类型,上面通过一个关键字instanceof来判断,变量指向的对象是否是animal类的一个实例,下面new cat(),new dog()都是animal子类的对象,而输出了“dog say wangwang...”和“cat say miaomiao...”,说明子类对象是父类的一个实例,从而达到了java多态的功能。

至此,得出php虽然多态体现模糊,但还是具有多态特性的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章