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虽然多态体现模糊,但还是具有多态特性的