interface、abstract及trait的基本使用

Scala类与对象设计原理:从JVM字节码看class/object/case class/trait本质 在JVM平台上,类(class)与对象(object)是面向对象编程的基础抽象,其设计直接受限于字节码规范与运行时约束。理解它们的编译原理,有助于规避单例状态污染、并发修改异常、序列化失败等高频工程问题。Scala通过将object编译为带MODULE$静态实例的类、将case class自动注入unapply和copy方法、用trait实现接口级多重继承等方式,在JVM限制下重构了OOP范式。这种设计不仅保障了类型安全与不可变性,更支撑了Akka集群配置共享、Spark RDD结构化数据处理、Play框架 阅读详情

interface:中文名叫接口,是一种只有常量成员和成员方法的抽象类,接口是一种特殊的抽象类,在程序中起到规范的作用。
1、接口的声明:
接口使用关键字interface进行声明,接口中的成员方法默认是公有的因此不需要使用public进行修饰。
eg:

<?php
interface IAnimal
{
    const NAME = '动物';

    function eat();

    function play();

    function sleeps();
}

2、特点:
① 接口是不能被实例化的。
② 接口使用interface进行声明;implements进行实现,使用逗号隔开可以多继承。
③ 继承它的子类必须实现其中的所以方法。
④ 不能包含成员变量;可以有常量成员。
⑤ 可以直接使用接口名称在接口外面获取常量成员的值。

echo IAnimal::NAME;

eg:

<?php
class Cat implements IAnimal,IBiology
{
    public function eat()
    {
        echo '猫爱吃鱼';
    }

    public function play()
    {
        echo '猫爱玩游戏';
    }

    public function sleeps()
    {
        echo '猫整天睡大觉';
    }

    public function breathe()
    {
        echo '猫和其他生物一样要呼吸';
    }
}

总结:接口可以看做是一个固定类的模板,子类的方法必须遵循接口类的方法名。这样在协同开发的时候就起到了一定的作用,这样就可以避免我们在调用别人开发的方法时不知道方法名的尴尬了。

abstract:中文叫抽象类,抽象类说白了就把类像的部分抽出来。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
1、抽象类的声明:
抽象类是在class前面加上abstract 关键字进行声明的;抽象类里可以有成员属性和成员方法。
eg:

<?php
abstract class Animal
{
    public $name = '动物';
	
	//强制要求子类定义的方法
	abstract public function breathe();
	
	//普通方法
    public function eat($name, $foot)
    {
        echo $name . '爱吃' . $foot;
    }

    public function play(){}

    public function sleeps(){}
}

2、特点:
① 抽象类不能被直接实例化。
② 抽象类通常具有抽象方法。
③ 抽象类是使用 extends 进行继承的。
④ 继承它的子类可以不实现其中的非抽象方法。
eg:

<?php
class Dog extends Animals
{
    public function breathe()
    {
        echo '狗狗也要呼吸';
    }
    
    public function eat($name, $foot)
    {
        echo $name . '不爱吃' . $foot;
    }
}

总结:与接口不同抽象类提供了具体实现的标准,而接口则是纯粹的模版。在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用抽象类。

trait:trait的出现就是为了解决PHP方法可以复用但又是单继承而无法达到更多复用的问题。
1、用法:通过在类中使用use 关键字。
eg:

<?php
trait Log
{
    public function w($text)
    {
        echo $text . '写入日志';
    }
}
<?php
class Dog extends Animals
{
    use Log;

    public function breathe()
    {
        
    }
}

(new Dog())->w('吃饭');

2、特点:
① Trait 可以引入多个, 多个trait中存在同名方法时, 需要指定使用哪个方法。
② 引入方法与现有方法重名时, 会优先调用类中已定义的方法, 其优先级顺序为: 当前类方法>trait方法>父类方法。
③ trait 中可以定义抽象方法, 语法与抽象类相同。
④ trait 中可以定义成员变量和静态成员变量。
⑤ 在trait 代码块中还可以引入其他trait代码块。

增量编码器资讯大全 增量编码器是什么 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小,按照工作原理编码器可分为增量式和绝对式两类。 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。 编码器是把角位移或直线位移转换成电信号的一种装置。前者称为码盘,后者称码尺.按照读出方式编码器可以分为接触式和非接触式两种.接触式采... 阅读详情

相关推荐

实战指南:彻底清除TIA Portal卸载后遗留的SQL Server WinCC实例

本文详细介绍了如何彻底清除TIA Portal卸载后遗留的SQL Server WinCC实例,解决重新安装时的冲突问题。通过控制面板排查、注册表验证、安全卸载操作流程和注册表深度清理等步骤,确保完全移除残留组件,避免系统崩溃。文章还提供了安装环境重建策略和预防措施,帮助工程师高效管理西门子自动化软件。

weixin_30482181的博客 404

Scala的特质trait与java的interface接口的区别,以及Scala特质的自身类型和依赖注入

Scala 语言中,采用特质 trait(特征)来代替接口的概念,也就是说,多个类具有相同的特质(特征)时,就可以将这个特质(特征)独立出来,采用关键字 trait 声明。Scala 中的 trait 中即可以有抽象属性和方法,也可以有具体的属性和方法,一个类可以混入(mixin)多个特质。这种感觉类似于 Java 中的抽象类。Scala 引入 trait 特征,第一可以替代 Java 的接口,第二个也是对单继承机制的一种补充。

m0_46168848的博客 1679

瑞芯微RK3588开发板VSCode远程开发全攻略:从SSH配置到插件优化

本文详细介绍了如何在瑞芯微RK3588开发板上配置VSCode远程开发环境。从Ubuntu系统下的SSH服务设置、VSCode Remote-SSH扩展安装,到连接建立、基础工具链部署,再到针对ARM平台的性能优化与调试配置,提供了一套完整的实战指南,帮助开发者高效利用本地资源进行嵌入式开发。

weixin_28831341的博客 621

php中interface接口类,abstract抽象类和trait详解

php中interface接口类,abstract抽象类和trait分别有什么用?他们直接有什么区别?

jkzyx123的博客 910

VCL for PHP,Konopka Signature VCL Controls (Raize Components 6.2.3) for Delphi 10.4

The Raize Components suite includes a variety of interface design tools for Delphi programming language and C ++ Builder, which includes over 125 VCL controls and over 100 different tools for creating...

weixin_42137539的博客 851

通过实例讲解瀑布模型

在电子商城开发中,瀑布模型如同 “工业时代的流水线”—— 能通过标准化流程交付高质量、高合规性的系统,但也可能因缺乏灵活性而错失市场机会。其优势与缺点本质上源于同一核心特征:严格的阶段性与文档驱动。决策建议若开发传统型、长周期、需求固定的电子商城(如企业内部采购平台),可优先选择瀑布模型,并通过 “需求预验证 + 模块化设计” 降低风险;若开发创新型、短周期、需快速迭代的电商平台(如社交电商、跨境电商),建议采用敏捷模型或混合模型(如瀑布 + Scrum),平衡规范性与响应速度。

跟佟格湾一起学习计算机知识吧~ 271

php trait interface,为什么php的trait不能实现interface

php中为什么trait不能实现interface? 有时候,我们可能会需求使用我们的trait T的所有class都必须实现某interface I,毕竟在每个class中implement I 总没有使用 trait T implements I {} 方便。具体代码interface I {function foo();}trait T implements I {function foo(...

weixin_30980025的博客 280

深入剖析 Wenet 下 AISHELL-1 的 run.sh 脚本:从数据准备到模型训练

run.sh脚本用于处理 AISHELL-1 数据集的整个训练和测试流程。我们将逐步分析脚本中的每个部分,包括环境变量、参数设置、各个阶段的执行等。stage: 设置脚本的起始阶段(如数据准备)。stop_stage: 设置脚本的结束阶段。通过对 Wenet 下 AISHELL-1 的run.sh脚本的详细剖析,我们希望你能更好地理解每个步骤的功能及其背后的原理。此脚本不仅为模型训练提供了便利,也为用户自定义和扩展训练流程提供了基础。希望本教程能帮助你顺利完成语音识别项目!

帅小柏的博客 1632

面向对象php学习笔记19:PHP继承[静态延迟绑定,final类和方法,抽象类和抽象方法,接口,trait,php重载overload,对象遍历]

PHP继承 静态延迟绑定 定义:静态延迟绑定,即在类内部用来代表类本身的关键字部分不是在类编译时固定好,而是当方法被访问时动态的选择来访者所属的类.静态延迟绑定就是利用static关键字代替静态绑定self,静态延迟绑定需要使用到静态成员的重写. 1. 静态延迟绑定:使用static关键字代替self进行静态类成员访问 2. 静态延迟绑定一定是通过继承后的子类来进行访问才有效果 ...

ishenjiaming的博客 345

【C语言笔记初级篇】第一章:C语言快速入门及注意事项

(1)第一个C语言程序 A:利用vs2010写C语言程序 1:按以下步骤新建工程 2:添加源文件,“.c”文件 B:第一个C语言代码 1:以下是基本的C语言程序 2:由于没有设置连接器,所以打印结果没有显示,按照如下步骤链接控制台 (2)数据类型 A:基本数据类型及占用字节 B:一些概念的梳理 概念一:关于计算机的单位 位(bit):计算机通过电路的开关和闭合处理信息,电路通...

快乐江湖的博客 3737

OpenClaw实战系列·进阶特辑02:多智能体协同——打造企业级AI中台

**企业级AI中台面临多Agent协同的挑战,本文提出基于多智能体协同的解决方案。通过分析单Agent的局限性(上下文溢出、专业度稀释等)和多Agent的核心优势(任务专注度、故障隔离等),提出三种协作架构模式(指挥型、联邦型、点对点型),并强调人格化设计的重要性。文章详细介绍Agent间通讯机制(同步/异步会话、文件系统协作)和"身脑分离"的解耦架构设计,提供可落地的企业级AI中台实施方案。

PeterPan的博客 493

php抽象类、interface、trait、final

一、抽象类 抽象类的定义 任何一个类,如果它里面至少有一个方法被声明为抽象方法,那么这个类就必须被声明为抽象的,被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现,即抽象方法没有方法体。 抽象类不能被实例化 abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function get...

码农Robin的博客 504

读懂 SAP Fiori Administration Catalogs:从管理员入口、权限编排到 Spaces 和 Pages 的落地实践

SAP Fiori 管理员目录的核心价值在于为系统配置提供标准化入口,解决权限与展示分离的问题。随着 SAP_UI 7.55 版本更新,SAP_FLP_ADMIN 角色整合了关键管理工具(如 Launchpad Designer、Content Manager),并通过 Business Catalog 和 Space 的协同作用,确保管理员既能访问配置工具,又能直观查看相关功能入口。项目实施中需注意配置层级(系统级/客户端级)的选择,以及多人协作时的数据同步问题,以提升交付效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 193

PHP中的trait,interface和abstract

一直没找到一篇文章能好好讲解一下PHP中的trait,interface和abstract的异同,今抽时间整理了一下,做一下记录。结合一段代码说明一下,以下是代码: <?php trait MyTrait { protected $var = "MyTrait_var"; protected $var1 = "MyTrait_var"; function __construct

我希望,快乐,在我走过的地方绽放。。。。 6220

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

interface,abstract,trait和普通class的通俗理解

&lt;?php /** * 接口类 * 最顶层的class,只可被继承,不可以继承其他类 * 目的:设定后面继承class的方法,不实现 * Interface init */ interface init { public function getRequest(); public function setRequest(); } /** * 抽象类 * ...

yangbaobao95533的博客 442

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

PHP namespace、abstract、interface、trait使用介绍

小菜鸟一枚,一直搞不懂 namespace、abstract、interface、trait 这些关系,就抽出几天时间研究,做个总结,不足之处希望大家指正交流。 namespace 命名空间 介绍:顾名思义,就是给空间命名。其实最简单的可以把每个文件夹都理解为一个空间,然后我们给这个空间一个定义(namespace),让其成为正式空间。当然并不是说一个文件夹就需要一个空间(最好是),在同一个文...

weixin_30295091的博客 180

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PHP中interface、abstract、trait定义说明

interface:接口(特殊的抽象类) 应用场景: 1、 制定规范的时候,需要保持类方法的统一性 2、多个平级类需要去实现同样的方法,只是具体的实现方式不一样时(多态) 使用规范: 1、接口不能实例化 2、接口的属性必须是常量 const 3、接口的方法必须是public【默认public】,且不能有函数体 4、接口所有的方法都是抽象方法,类必须实现接口的所有方法 5、一个类可以同时实现多个接...

laogao 522

php trait abstract,trait,interface,abstract,PHP7新特性以及PHP闭包学习

1月8日trait自PHP5.4.0起,PHP实现了一种代码复用的方法 称为traittrait 是为 PHP这类单继承语言准备的一种代码复用机制 。trait 为了减少单继承语言的限制,使开发者可以在不同层级中独立的调用 trait中的 方法 trait和类的组合使用,避免了一般类的多继承和混入类(Mixin)相关的典型问题。trait 类似于一个类trait 不能被实例化 使用方法其他类中u...

weixin_39915668的博客 268

PHP 基础知识-interface、abstract class、trait

php interface 特性: 定义所有的方法必须是公有, 可以使用构造函数, 要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。 注意: 在 PHP 5.3.9 之前,实现多个接口时,接口中的方法不能有重名,因为这可能会有歧义。在最近的 PHP 版本中,只要这些重名的方法签名相同,这种行为就是允许的。 接口也可以继承,通过使用 extends 操作符。 类要实现接口,必须使用和接口中所

u013083541的博客 363

<基础> PHP 进阶之 抽象类(abstract)、接口(interface)、Trait(特征)

抽象类 PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。 抽象方法只能在抽象类中,抽象类中可以包含非抽象方法 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法,另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。 抽象方法给我们提供了一个很好的保护父类的方法 class Fr...

weixin_33877885的博客 183

trait用法汇总

trait和interface的区别 trait和abstract class的区别 如何限制哪些class可以继承trait 如何让一个instance object mixin一个trait trait在什么情况下使用extends和with关键词

我爱娃娃菜的博客 2282

PHP的Trait和extends

前言:总结一下PHP类的关键字,extends,trait,abstract,interface,implements。 《-------------------华丽的分隔线-----------------------------------------》 extends:单继承用法; trait:解决多继承问题;     不可以实例化;     优先顺序是来自当前类的成员覆盖了 ...

WGQTHXXXXM的博客 1067

java接口interface与scala特质trait区别;java中接口与抽象类abstract class区别;scala中特质与抽象类区别...

这里写自定义目录标题Java接口interface与Scala特质trait区别java中接口与抽象类abstract class区别Java抽象类与Scala抽象类区别scala中特质与抽象类区别预备知识: Java接口interface与Scala特质trait区别 本质:特质与接口均为公共规范标准;但scala的特质可扩展性更强,更接近于抽象类. 实现方式: 在Java和Scala中均为单继承类多实现接口. 但java使用implements实现接口; scala使用extends … with …实

lishuaiiii的博客 921

PHP5.4引入trait技术

php5.4 引入trait,和面向对象的大众接受的发展程度有关. 继承组合,设计模式, 框架,已经或即将成为主流,目的是为了提高生产力.复用是提高生产力的一个途径之一. trait是个古老的概念,之前一直停留在学术领域,近年来软件技术的发展,导致了这种东西被工业化市场化,php与时俱进,不错. interface和 absolute class存在于java语言中,php5引入了这两者.php...

weixin_30558305的博客 193

PHP面向对象编程(OOP)核心关键字完全指南

本文系统梳理了PHP面向对象编程中的核心关键字,通过建筑工地比喻形象区分了类、接口、抽象类等概念。重点解析了interface定义契约、abstract构建骨架、trait实现代码复用、final禁止继承等特性,并对比了访问控制修饰符的可见性差异。通过支付系统实例,展示了如何综合运用这些概念构建可维护的应用架构,为PHP开发者提供了清晰的OOP实践指南。

青衫无忧的博客 947
上一篇: 2020年终小结
下一篇: laravel学习笔记
柳逸尘Lycodx
博客等级 码龄8年 56粉丝 38原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值