热门标签 | 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关键字。

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

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


推荐阅读
  • LeetCode 540:有序数组中的唯一元素
    来源:力扣(LeetCode),链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array。题目要求在仅包含整数的有序数组中,找到唯一出现一次的元素,并确保算法的时间复杂度为 O(log n) 和空间复杂度为 O(1)。 ... [详细]
  • 如何在Faceu激萌中设置和使用妆容切换特效?
    本文将详细介绍如何在Faceu激萌应用中设置和使用妆容切换特效,帮助用户轻松实现创意拍摄。无论是新手还是有经验的用户,都能从中受益。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 郑州大学在211高校中的地位与排名解析
    本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 电子元件封装库:三极管、MOS管及部分LDO(含3D模型)
    本资源汇集了常用的插件和贴片三极管、MOS管以及部分LDO的封装,涵盖TO和SOT系列。所有封装均配有高质量的3D模型,共计96种,满足日常设计需求。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
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社区 版权所有