面向对象之类的继承;重写;重载;最终形态;设计模式;抽象类,抽象方法,接口’

类的继承

  1. a类拥有b类的所有特性,并且还可以拥有一些自己的特性;就可以实现a类继承b类,并在这个基础上追加一些特性;
  2. 继承:一个类从另一个已存在的类中获取其特性就是继承  (从父类的角度看)
  3. 派生:从一个已有的类中产生一个新的类,称为派生;(从子类的角度看)
  4. 子类和父类的定义: 本身被继承的类称之为父类(又叫基类),继承别的类来获取特性的类称之为子类(派生类)
  5. 单继承:一个子类只能继承一个父类的特性  大多数语言都是单继承;c++是多继承
  6. 扩展:扩展就是一个子类继承完特性后,再定义本身的属性,没有拓展继承就没有意义

访问权限的修饰符

Public  公共的;在本类,继承关系的类,和类外都能用

Protected  受保护的:在本类和继承关系的类都能使用

Private  私有的:只能在本类中使用;

关键字

Self  指类本身;

$this 也是指类本身;

Parent 指父辈;

Static 定义静态属性,方法时使用;

构造和析构方法在继承中的表现

构造方法:

  1. 在子类中没有定义构造方法时,会调用父类的构造方法,调用父类的构造方法时要按照父类的调用方式来;
    2. 子类定义了构造方法时,优先调用子类的,也可以手动调用父类的构造方法;(parent::__construct();

3.通常情况下,都会调用父类的构造方法来节约代码

4. 上三条构造方法同样适用于析构方法

重写 override

.

重写又叫覆盖,子类继承父类的方法和属性重新“定义”就是重写;

重写时,子类的所有属性和方法必须和父元素的相等,在通过子元素调用和父元素相等的属性或方法时,会以子元素的为准

二.

访问控制权限

下级的访问控制权限应该不低于上级的访问控制权限:

上级:public  下级:只能public

上级:protected  下级: protected, public

上级:private   下级:private  protected  public——实际此情况无意义。

私有的不能覆盖,而是完全当作自己全新的。

三.

  1. 构造方法的重写,可以像普通方法一样重写,而且参数还可以不一致
  2. 父类私有权限的属性和方法是不能被覆盖的,但是子类通过编辑相同的方法和属性来重写;但方法的参数必须一致;

最终

最终类:

最终类就是代表不能被继承的类

形式:

final  class  类名{ 。。。。类定义。。。。}

最终方法

     最终方法是不能被覆盖和重写的

形式:

final  function  方法名(){。。。。方法定义。。。。}

设计模式

主要指一些事情的处理经验,不同的解决方法也可以称之为不同的设计模式

1.工厂模式

通过一个类,来实现传不同的参数,实现不同的实例化对象就可以称这个类为工厂;而这个工厂的作业就是产出不同的对象

2.单例模式

根据不同的要求,某个类只能被实例化对象一次,就是单例模式;

单例模式有一个三私一功;两个私有方法,一个私有属性,一个公用方法

抽象类

1.抽象类就是在类定义时,class前面加abstract这个关键字,这个类就是一个抽象类;

 2.抽象类的主要作用就是用来当做父类的

 3.抽象类的定义abstract  class  类名{.....类的定义.....}

 4.抽象类的里面主要就是一些子类的共有属性和共有方法,用抽象类来继承

抽象方法

1.抽象方法是配合抽象类来规范子类的写法;定义时也是需要加abstract这个关键字

2.抽象方法的定义abstract  function  f1($x1, $y, $m)//注意,后面一定有分号。

3.抽象方法就是要求下级,也就是子类要怎么做的

抽象类和抽象方法的细节描述

1.如果一个方法是抽象方法,那么这个类也必须是抽象类

2.一个抽象类中有或没有抽象方法并没有多大关系,但通常对于这个抽象类来说意义不大

3.一个子类继承抽象类后,必须全部重写抽象类的抽象方法,除非这个子类也是个抽象类

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

PHP中的重载技术

其实就是同一个方法名中有个数不同的参数,参数不同可以是个数不同,参数不同,顺序不同,但是php中不能重复定义同一个方法,会报错;

所以PHP中的重载是另外一种定义:

属性重载: 如果使用一个不存在的属性,就会去自动调用类中预先定义好的某个方法以处理数据;

方法重载: 如果使用一个不存在的方法,就会去自动调用类中预先定义好的某个方法以处理该行为

属性重载:

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

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

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

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

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

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

方法重载:

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

上面所学的几个方法都被称为“魔术方法”:

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

接口:

类:有属性,有方法;有类常量;

抽象类:有属性,有方法;有类常量; 还可以有抽象方法(只有方法头)

“更”抽象类(就是接口) :有接口常量;还可以有抽象方法(只有方法头)

接口简单来说就是抽象类的集合体,来规范抽象类的写法;

猜你喜欢

转载自www.cnblogs.com/baobaoa/p/9142713.html