详细对比php中类继承和接口继承


Posted in PHP onOctober 11, 2018

PHP类继承:

1、PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承

比如:

class frist{
  public function __construct(){
    echo "我是第一个类。","<br>";
  }
  public function printer(){
    echo "frist","<br>";
  }
}
class seconds extends frist{}
class third extends seconds{}
$obj = new third();
$obj->printer();

结果:这是第一个类。 frist 第二个类和第三个类没有重写printer()方法,第三个类实例化后可以调用printer()方法。

2、继承权限问题

(1)父类private方法不可被继承,父类私有化

(2)父类protected方法可以被继承,但不能被实例化对象调用,如果调用会出现" Call to protected method frist::printer()"的报错,父类对此方法置于保护模式下

(3)父类public方法可以被继承、可以被实例化对象调用,属于公开方法

(4)子类可重写父类public或者protected的方法,不能重新private的方法,如果同名只是在本类重新声明

3、接口类继承

(1) 接口支持多继承,接口类的方法不需要实现比如:

interface frist{
  public function ex1();
}
interface seconds{
  public function ex2();
}
interface third extends frist,seconds{
  public function ex3();
}
class fourth implements third{
  public function ex1(){}
  public function ex2(){}
  public function ex3(){}
}
class fourth implements frist,seconds{
  public function ex1(){}
  public function ex2(){}
}

(2) 接口类的方法权限都是public,默认public

(3)引用接口的类必须实现接口的所有方法,否则会报错,比如:"Class e contains 1 abstract method and must therefore be declared abstract or implement the remaining methods",即:e类包含1个抽象方法,因此必须声明抽象或实现其余方法。

4、抽象类:只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类

(1)抽象类继承抽象类不能重写父类方法。

(2)抽象类继承是对父类的方法的拓展。

(3)继承的派生类当中要把所有抽象方法重载才能实例化。

(4)抽象类实现的普通发放,可以在非抽象子类中直接调用。

5、接口和抽象类的异同点(引用抽象类与接口区别)

(1)对接口的使用方式是通过关键字implements来实现的,而对于抽象类的操作是使用类继承的关键字exotends实现的

(2) 接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封装。

(3) 接口没有构造函数,抽象类可以有构造函数。

(4)接口中的方法都是public类型,而抽象类中的方法可以使用private、protected或public来修饰。

(5) 一个类可以同时实现多个接口,但是只能实现一个抽象类。

(6) 相同点:函数体内不能写任何东西,比如:function getName();即可。

PHP 相关文章推荐
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
基于PHP array数组的教程详解
Jun 05 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
php显示时间常用方法小结
Jun 05 PHP
php给图片添加文字水印方法汇总
Aug 27 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP中使用OpenSSL生成证书及加密解密
Feb 05 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
PHP JWT初识及其简单示例
Oct 10 #PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 #PHP
php实现单笔转账到支付宝功能
Oct 09 #PHP
php实现小程序支付完整版
Oct 09 #PHP
php实现微信企业付款到个人零钱功能
Oct 09 #PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 #PHP
php微信公众号开发之微信企业付款给个人
Oct 04 #PHP
You might like
PHP 数字左侧自动补0
2008/03/31 PHP
分享PHP守护进程类
2015/12/30 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
node后端服务保活的实现
2019/11/10 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
Django model序列化为json的方法示例
2018/10/16 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
JNI的定义
2012/11/25 面试题
华为慧通面试题
2012/09/11 面试题
别名指示符是什么
2012/10/08 面试题
2014年社区学雷锋活动总结
2014/03/09 职场文书
学历公证委托书
2014/04/09 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
国王的演讲观后感
2015/06/03 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
MySQL锁机制
2021/04/05 MySQL
基于python制作简易版学生信息管理系统
2021/04/20 Python
如何获取numpy array前N个最大值
2021/05/14 Python