zoukankan      html  css  js  c++  java
  • 20150112--抽象类+接口+重载+自动加载机制-01

    image

     

    回顾

    面向对象:自动加载(__autoload),类常量访问(范围解析操作符),静态(属性和方法:self)

    设计模式:单例模式(三私一公),工厂模式

    面向对象三大特性:封装,继承和多态(PHP不支持)

    PHP继承:extends(对象继承:属性和非私有方法)

    PHP继承

    方法重写

    子类拥有与父类同名的方法。

    clip_image002

    除了私有的属性和方法之外,系统一律都是去子类中查找属性和方法,但是如果对应的属性和方法是私有的,那么系统一定要去判断$this所代表的上下文(类环境),在哪个类就访问哪个类的私有属性和方法。

    重写的原则:被重写的方法的访问权限一定要比原来的方法的权限要大(Open)。

    clip_image004

    PHP继承链

    在php中不支持一个类继承自多个父类。

    在有些语言中 可以实现多继承:class A extends B,C(PHP中不行)

    clip_image006

    PHP中可以通过继承链(链式继承)来实现子类继承多个“父类”。

    clip_image008

    静态在继承中的使用

    静态的东西属于类,类其实在结构有类似继承概念,所以静态的内容也可以遵循继承的传统去跨类使用。

    clip_image010

    parent关键字

    如果子类中重写了父类的方法,那么父类的方法就不再会被调用,但是有时候需要父类的方法也执行,就需用使用parent关键字:

    在被重写的方法之内:parent::父类的同名方法()

    clip_image012

    特殊类

    有时候不希望自己写的类被别人继承,因为继承就有可能破坏类的结构。

    Final类

    final类又叫做最终类,指的是使用final 关键字修饰的类,不可以被其他类继承。

    clip_image014

    final关键字还能修饰方法,表示被修饰的方法不能被子类重写。

    clip_image016

    final类的意义:不可以继承,防止类结构被破坏

    抽象类

    有些类不能够被实例化,只能被继承。

    抽象类是使用abstract关键字修饰的类。

    clip_image018

    抽象类只能被继承

    clip_image020

    abstract关键字可以用在方法上;表示当前方法是抽象方法,抽象方法不能有方法体(大括号)

    clip_image022

    抽象方法必须被子类实现:重写并添加方法体

    clip_image024

    实现抽象类的抽象方法

    clip_image026

    继承抽象方法:子类也必须是抽象类

    clip_image028

    一个拥有抽象方法的类一定是抽象类(必须显示的对类使用关键字abstract)

    clip_image030

    抽象类的意义:抽象类用于规范下面的子类里面所拥有的方法的名字

    如果项目较大,有可能使用抽象类,如果项目很小或者说不需要那么多规范,就不怎么使用抽象类。

    抽象类中可以拥有普通类中任何的类成员,但是不能使用私有的访问修饰限定符(private)

    clip_image032

    接口

    接口分为很多种

    应用型接口:一种可以允许外部使用的入口

    数据型接口:用来规范外部去实现某些功能的方式(结构规范)

    定义接口

    语法:interface 接口名字{//接口体}

    clip_image034

    接口体

    接口体也称之为接口成员,指的是在接口中可以定义的内容。

    在接口中,只能有方法和常量,而且方法必须是抽象(不需要abstract关键字:没有方法体)的,而且只能public修饰。

    clip_image036

    接口不能被实例化,接口也不能被“继承”,接口只能被实现:implements

    实现接口

    实现接口值:用类去实现接口,必须要实现接口中的所有的抽象方法。

    clip_image038

    接口意义

    与抽象类一样,用来规范底层的类的结构。比抽象类更加严格的规范结构。接口是一种纯粹用于规范的一种结构。

    接口只有在团队比较大,分支比较多的情况下,用于规范整个团队,保证内部的不同分支下的结构相同。

    接口的特殊使用

    接口可以多实现,一个类可以同时实现多个接口

    class 类名 implements 接口1,接口2,…{}

    clip_image040

    接口可以继承接口:interface A extends B{} //B是接口

    clip_image042

    常见的面试题

    1. 抽象类是不是类?

    抽象应该理解为是类,但是不能被实例化的类。(用的是关键字class)

    2. PHP是否支持多继承?如何模拟?

    PHP不支持多继承,但是可以用链式继承来模拟实现多继承。

    2. 接口是不是类?接口是不是抽象类?

    接口不是类,接口是interface,而类是class;接口也不是抽象类

    3. 接口能不能被继承?

    接口只能被类实现,但是接口是可以被接口继承的。

    类相关常用的方法

    class_exists:判断类在内存中是否存在,用于在类的加载之前进行数据判断

    clip_image044

    interface_exists:判断接口是否存在

    method_exists:判断方法是否存在,只要方法存在,跟方法所有的访问修饰限定符没有关系

    clip_image046

    get_class:得到对象类名

    clip_image048

    get_parent_class:得到父类名,获取当前对象对应的类的上级类的类名,如果上级也是继承自其它类,则获取不到。(只能获取父类名)

    clip_image050

  • 相关阅读:
    罗马数字转整数
    对称的二叉树
    python中列表,元组,字符串 互相转换
    python django 批量上传文件并绑定对应文件的描述
    python django mkdir和makedirs的用法
    python 获取两位的月份(09)和天数(09)
    django 注册后台管理 在debug=true能行,在debug=false不能显示出管理标签
    django OperationalError: unable to open database file 创建数据库
    网站安全保证设置及网站认证
    动态的有序分类导航:每个一级标题下都有多个二级标题。
  • 原文地址:https://www.cnblogs.com/lifushan/p/5419323.html
Copyright © 2011-2022 走看看