0607-抽象类抽象方法接口类的重载类的自加载对象的克隆

Posted Aifeiff

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0607-抽象类抽象方法接口类的重载类的自加载对象的克隆相关的知识,希望对你有一定的参考价值。

1.抽象类、抽象方法(abstract

正常定义类(方法)的前面,加上关键字:abstract,就构成抽象类(方法)。

抽象类:抽象类就是用来做父类的,可以用来规范一些类的共同特性,不能被实例化,子类继承了它的特性,这就是“规范作用”

抽象方法:抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已。例如:abstract  function  f1($x1, $y, $m);

抽象类抽象方法细节关系描述:

1.抽象方法只能存在于抽象类。

2.但,一个抽象类中,可以没有抽象方法——但通常意义不大。

3.子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类

4.子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致——其实这就是重写,所以要满足重写的要求。

 2.接口(关键词:interface、implements--实现 )

定义:更抽象的抽象类(方法全为抽象方法)就是接口。

因为接口中的方法都是抽象的,则下级类就必须:

1.要么实现该抽象方法(写出其方法体)

2.要么也声明为抽象方法——等待更下一级的类去实现。

一个类只能继承一个父类,但可以实现多个“上级接口”,语法形式:

   class  类A  extends  B  implements  接口1,接口2.... { 。。。类定义语句。。。}

一个接口同样可以继承另一个接口(也是单继承):

   interface  接口1  extends 接口2  {接口定义}

3.重载

在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”。

参数不同可以是:数量个数不同,或类型不同,或顺序不同。

属性的重载:

如果某属性不存在,但在语法中使用如下情形,则会发生:

取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法

赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法

判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法

销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法

前提都是:类中要预先定义好这些方法。

方法的重载:

当使用一个对象调用一个不存在的普通方法的时候,会自动去调用预先定义好的"__call"方法。

类的重载:

当使用一个对象(类)调用一个不存在的静态方法的时候,会自动去调用预先定义好的"__callStatic"方法。

几个魔术方法:

__get(), __set(),  __isset(), __unset(),  __call(),  __callstatic();

4.类的自动加载:使用一个类的时候,自动引入类文件

方法1:使用__autoload魔术函数

方法2:使用spl_autoload_register函数

5.克隆

php中,默认克隆是浅克隆

要想实现深克隆(一个对象的所有属性数据都彻底实现了“复制”),就需要对该对象类使用魔术方法:__clone(),并在里面来实现深度克隆——人为去复制浅克隆复制不了数据。

以上是关于0607-抽象类抽象方法接口类的重载类的自加载对象的克隆的主要内容,如果未能解决你的问题,请参考以下文章

静态代码块类的继承和接口

java 中interface和抽象类的区别

接口和抽象类的异同

抽象类和接口

java接口和类的区别在那里.

接口与抽象类的区别(完整描述)