热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php面向对象编程-oop的3大特征(封装-继承-多态)

在面向对象编程语言中,并不是所有的面向对象语言都有类的概念。传统的oop语言中存在类的概念

在面向对象编程语言中,并不是所有的面向对象语言 都有类的概念。传统的oop语言中存在类的概念。

类:其实用来抽象对象。 对某类事物, 下个定义,规定了其有哪些属性和能力(方法)。

抽象:将现实或者逻辑世界实体, 变成 编程设计语言的 对象的过程。 也可以称作是 封装的过程。 将某些数据和某些操作制作成一个统一的整体(对象)

OOP的三大特征:

封装:

定义类的过程。

尽量使用 私有化成员,如果用户需要操作,则应该提供相应的操作接口完成。

oop编程

继承:

如果oop编写中,出现了 属性 与 方法的重叠,将重复代码提取,形成一个对象,然后让需要使用重复代码的对象,继承自这个对象。

多态:

一个方法成员多种形态。

php学习博客

注意:以上代码是不能执行的, 只是用来模拟 一个方法的不同形态。


继承:

面向对象内 继承 指的是 对象继承自另一个对象,可以将另一个对象内的方法和属性全部拿过来为自己使用。

在语法上,继承使用 类 来完成。

使用 关键字 extends 来完成 类 之间的继承。

再使用 实例化 就可以得到一个继承的对象。

继承

这样  我们通过 D 类 实例化的对象 就拥有了 C类对象的所有属性。

php blog

方法也可以继承,

但是继承 并不是指 将父类的代码复制到子类中,而是说明在父类与子类之间 维护了一条关系,通过这个关系 达到成员继承的目的。

在继承时的成员控制:

Public 公共的 所有地方都可以被访问(本类内,父类类,子类类,类外)

Private 私有的 本类内可以被访问(本类内)

Protected, 指的是在整个类继承链内,可以被访问。(本类,父类,子类)

其中 :

私有的成员 不能被继承, 但是可以在子类内被访问。

受保护的成员可以被继承,但只能在类内访问

公共的成员 可以被继承,并且类内 类外都可以。

注意:访问控制 控制的是 对象级别的  还是 类级别 的访问?

是站在 类的角度去 衡量 一个成员是否能被访问到,而不是 站在对象的角度。因为,同一个属性 有时可以被访问,有时不能被访问,取决于访问代码的位置。

小技巧,

如果一个类不涉及到继承 就尽量使用 private 控制成员权限

如果涉及到继承, 就会尽量使用 protected 控制权限。

#p#oop三大特征-继承使用的细节#e#

继承时 如果出现冲突 应该怎么处理?

成员名称的冲突

如果出现成员冲突,则子类会重写(override)父类的代码。

继承细节

如果子类中找不到,则会去父类查找:

php 学习博客

访问权限的冲突,

如果名称相同,但是访问控制不同 ,是如何处理的?

在继承的情况下 要求同名的成员的访问级别, 子类的级别 应该 高于(强于) 父类的级别。如果父类的为 protected 子类的应该是 protected 或者 public。

Parent

如果我们需要在类中访问父类的同名的成员的话,需要使用parent关键字来代替父类。从而访问父类资源(静态方法,方法,静态属性,常量).

例如 访问父类的构造方法:

parent

Self::   代替本类

Php的类继承 是 单继承,指的是,一个类只能通过继承另外一个类,不能同时直接继承多个类。

继承的使用

继承在平时开发中的使用:

一个项目多张表,管理表,对每个表进行增删改查,针对每个表的操作,都定义成一个类的话。可以让他们都继承一个基类(db类)

php 博客

#p#oop三大特征-final类-抽象类-接口#e#

不能被继承的类。

不能被继承的 称之 Final类,定义的方式非常简单  class前增加 final关键即可。

final类

继承时 会 出错。

抽象类 

Final关键的 还可以写到 方法前。

说明这个方法不能被重写。但是所在类可以被继承。

abstract

只能被继承的类。

不能实例化对象 只能被别的类来继承。

这种类 称之为  抽象类 使用关键字  abstract来实现。

Abstract class 类名{}

抽象类

通常 会在抽象类中,定义抽象方法(只有方法名,没有方法体的方法)。规定 继承这个抽象类的子类内,应该必须有哪些方法,换句话说,就是继承抽象类的子类必须实行该抽象类的所有抽象方法。

通常会在 同一类操作的不同介质之间,例如(同样的数据库操作,但是不同的数据库类型),采用抽象类的形式 规定 不同的操作介质的操作接口应该一致:

注意,抽象类内,除了抽象方法外还可以存在 其他的非抽象方法,和属性的定义。

学习php

由于抽象类也属于类的范畴,但是也不能做多继承。 不能使用多个类 来规定 某一个类的内容。

接口:interface

专门用来规定类的结构的。它 可以同时使用多个接口去规定一个类的结构。

接口的定义:


Interface 接口名 {
接口成员
}
接口成员:常量 和 方法
接口的使用,
接口需要使用 类来实现 才能有意义:
Class 类名 implements 接口名列表 {
类成员,必须实现接口内的不完整的方法才可以。
}


oop-接口

Php中是否支持多继承?

如何模拟多继承?

可以使用接口技术 模拟。

接口和接口之间可以相互实现么?

可以互相继承。使用extends关键字。

接口是不是类?是不是抽象类?都是抽象方法的类?

接口不是类,不是抽象类。但是可以理解成 全都是抽象方法的抽象类。


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • PHP玩家基地系统毕业设计(附源码、运行环境)的用户登录界面、游戏管理和玩家作品管理
    本文介绍了一个PHP玩家基地系统的毕业设计,包括用户登录界面、游戏管理和玩家作品管理等功能。附带源码和运行环境,并提供免费赠送本源代码和数据库的方式,请私信获取详细信息。摘要共计约XXX字。 ... [详细]
  • 本文描述了作者第一次参加比赛的经历和感受。作者是小学六年级时参加比赛的唯一选手,感到有些紧张。在比赛期间,作者与学长学姐一起用餐,在比赛题目中遇到了一些困难,但最终成功解决。作者还尝试了一款游戏,在回程的路上感到晕车。最终,作者以110分的成绩取得了省一会的资格,并坚定了继续学习的决心。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 关羽败走麦城时路过马超封地 马超为何没有出手救人
    对当年关羽败走麦城,恰好路过马超的封地,为啥马超不救他?很感兴趣的小伙伴们,趣历史小编带来详细的文章供大家参考。说到英雄好汉,便要提到一本名著了,没错,那就是《三国演义》。书中虽 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 橱窗设计的表现手法及其应用
    本文介绍了橱窗设计的表现手法,包括直接展示、寓意与联想、夸张与幽默等。通过对商品的折、拉、叠、挂、堆等陈列技巧,橱窗设计能够充分展现商品的形态、质地、色彩、样式等特性。同时,寓意与联想可以通过象形形式或抽象几何道具来唤起消费者的联想与共鸣,创造出强烈的时代气息和视觉空间。合理的夸张和贴切的幽默能够明显夸大商品的美的因素,给人以新颖奇特的心理感受,引起人们的笑声和思考。通过这些表现手法,橱窗设计能够有效地传达商品的个性内涵,吸引消费者的注意力。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • faceu激萌变老特效的使用方法详解
    本文介绍了faceu激萌变老特效的使用方法,包括打开faceu激萌app、点击贴纸、选择热门贴纸中的变老特效,然后对准人脸进行拍摄,即可给照片添加变老特效。操作简单,适合新用户使用。 ... [详细]
author-avatar
手机用户2502917981
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有