详细对比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 判断数组是几维数组
Mar 20 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
php简单复制文件的方法
May 09 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP receiveMail实现收邮件功能
Apr 25 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内存缓存Memcached类实例
2014/12/08 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
Python基于PycURL实现POST的方法
2015/07/25 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python实现在线翻译功能
2020/03/03 Python
selenium如何定位span元素的实现
2021/01/13 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
农村产权制度改革实施方案
2014/03/21 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
个人主要事迹材料
2014/08/26 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
运动员入场词
2015/07/18 职场文书
大学生团支书竞选稿
2015/11/21 职场文书