PHP-------抽象和接口
静态的关键字是:static
Class ren
{
Public static $yanse; //yanse是一个静态的成员
Static function show() ; // static写在function的前面
{
ren::$yanse; //在静态的函数(静态方法)里,去调用静态的成员 类名::调用$yanse;
}
}
在静态的函数(静态方法)里,去调用静态的成员,还有一种方法,是,使用,self:: $yanse;
Class ren
{
Public static $yanse; //yanse是一个静态的成员
Static function show() ; // static写在function的前面
{
self:: $yanse; // self 就代表这一个类::调用$yanse;
}
}
//Ren具体到某一个类的,可以是人类,也可以是另外一个类
//Self 写在哪个类里就代表哪个类,Self写在ren里,这和Self就代表人ren
//Self只能在类里面写,代表哪个类
Class ren
{
Public static $yanse;
Static function show() ;
{
Car::$mingzi;
self:: $yanse;
}
}
Class car
{
Public static $yanse;
}
如果用类名的话,不仅可以调用该类里面的,静态的,也可以调用其它类里面的静态的。
但是,使用self ,就只能调用,该类里面的静态。self写在哪个类里面,就代表哪一个类。
self 和this 是不一样的:this写在哪个类里,代表哪一个对象。Self写在哪个类里,代表哪一个类。
记住四句话:
【1】普通成员是属于对象的
【2】静态成员是属于类的
【3】普通成员方法里面可以调用静态成员,也可以调用普通的
【4】静态方法里面不能调用普通成员
静态方法里面可以调用静态的成员
之前讲的类可以实例化。
抽象
不可以实例化的类称为抽象类。
抽象类:这个分类太过于抽象,没法把它具体实例化出来。
抽象的关键字::abstract
比如,例子:
<?php
abstract class DongWu
{
public $dong;
public $jiao;
function Chi()
{
}
function Shui()
{
}
}
class Ren extends DongWu //造一个具体的类造一个人类,需要继承动物
{
}
$r=new Ren();
var_dump($r);
?>
结果显示:
通过继承来实现
抽象类有什么作用呢???
他不能实例化。抽象类可以用来约束它的子类。
比如说,要造好多动物的类,关于人的,关于猫狗的,造这些类出来,然后这些类呢,都要让他们有某些成员,有某些方法,让它们定义,造这些类但是这些类中,必须都有一个吃的方法,一个睡得方法,不能说造出的类,没有一个吃的方法,我调用吃的它会报错,调用睡的方法它会报错,所以做了一个抽象类,这个抽象类当做所有动物类的父类,然后通过子类中去继承这一个类,来实现相应的功能,相应的去造具体对象。这样的话,造的不管是人类还是狗类还是其他的类,它里面都包含,这两个成员变量,public $dong; public $jiao; 都包含这两个成员方法function Chi(){} function Shui(){} 这样就可以通过抽象类把它的子类控制住了。
只能继承一个父类,不能同时继承两个。
接口
还有一个和抽象类比较像的,他们两的功能可以互换的,叫接口
接口的概念是:极度抽象的类(相对的来说的)
接口也是一个抽象类
接口的关键字是:interface
使用interface 关键字,就不要加class
Interface DongWu //动物的一个接口
{
}
接口是控制子类的
比如,电脑USB接口,在做USB接口时,不知道用户将来要往USB接口上插什么东西,可以插鼠标,可以插键盘,可以插优盘,等等一些列的东西多可以往里插。但是在做的时候并不知道用户将要插什么东西,既然不知道,但接口提供出来了,有相应的功能必须要有。插任何的东西,都要有一个方法是读取,还有一个方法是写入
//接口
Interface USB
{
function read() //一个方法是读取 读取的功能
{
}
function write()//一个方法是写入
{
}
}
再做USB接口时,考虑到肯定能读,能读插进来的东西,而且能够往里写东西,功能是能写和能读,既然提供了接口,接口就要瞒足这两个条件能读能写,至于怎么读和写是怎么实现的我们不管它
function read(){ 是空的,不写 } function write(){ 是空的,不写 }
是空的没有任何的代码,因为这里面没法写具体代码,不知道怎样去实现它,不知道怎样去实现读和写,但是必须去规定,您只要使用接口,就必须能读能写,针对USB接口有很多厂商。
生产的鼠标的厂商,再生产鼠标时提供了一个鼠标驱动,这个鼠标驱动就是一个类
class Mouse extends USB //鼠标驱动就是一个类 需要继承接口 继承您的接口来实现里面相应的功能
接口里面有read方法,有write的方法,鼠标驱动器里,也必须要有一个read和write
Interface USB
{
function read() //一个方法是读取 读取的功能
{
}
function write()//一个方法是写入
{
}
}
class Mouse extends USB
{
}
例子代码:
显示的结果::报错了
接口和抽象类的区别是::
抽象类里面的方法,在继承过来之后,可以不用去重写,但是接口必须要重写,就强制性规定,就必须要实现我里面写每一个的方法。
在用的时候有一些区别,区别在于抽象类,继承抽象类可以不用实现里面的方法,但是继承接口就必须要实现接口里的方法。
做了一个鼠标的类,这个鼠标的驱动,它就要实现USB接口里面的两个方法:
class Mouse extends USB //鼠标的驱动
{
function read()
{
echo “插入了鼠标”;
}
function write()
{
echo “通电给鼠标”;
}
}
$m=new Mouse();//造了一个鼠标
$m -> Read();//读鼠标里的数据,就用Read();方法
$m -> write();//往鼠标里写入数据,就用write();方法
这是写的鼠标的驱动,它实现USB接口,它里面要求,必须有两个方法,一个是读取的一个是写入的方法。插上鼠标他就可以来调用鼠标的驱动,来实现里面的读和写,造了一个鼠标。
例子代码:
Interface USB
{
function read() //一个方法是读取 读取的功能
{
}
function write()//一个方法是写入
{
}
}
//鼠标的驱动
class Mouse implements USB //鼠标的驱动
{
function read()
{
echo “插入了鼠标”;
}
function write()
{
echo “通电给鼠标”;
}
}
//键盘的驱动
class JianPan implements USB // 键盘的驱动
{
function read()
{
echo “插入了键盘”;
}
function write()
{
echo “通电给键盘”;
}
}
$m=new Mouse();//造了一个鼠标
$m -> Read();//读鼠标里的数据,就用Read();方法
$m -> write();//往鼠标里写入数据,就用write();方法
每一个实现接口的子类,都必须要实现里面Read();和write()的方法,这样可以看出,
定义接口是计算机来定义的,定义好接口之后,要使用USB接口,就必须要瞒足这里面的两个方法Read();和write();必须要实现,如果不实现其中的一个,生产的产品USB就不能使用,所以接口强制性,规定了某一些,类中必须要实现的功能,强制性就是规定必须要实现这一功能。
接口的关键字是:interface
接口里面的方法没有函数体
实现接口使用的关键字:implements ,不使用extends
实现接口的子类必须要实现接口的每个方法。
PHP-------抽象和接口的更多相关文章
- Java基础---继承、抽象、接口
一.概述 继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单 ...
- Java面向对象的基本概念(对象、封装、继承、多态、抽象、接口、泛型)
对象:是一个自包含的实体,用一组可识别的特征和行为来标识. 类:具有相同的属性和功能的对象的抽象合集.(类关键字class,首字母大写). 实例:就是一个真实的对象. 实例化:创建对象的过程,关键字是 ...
- Java面向对象理解_代码块_继承_多态_抽象_接口
面线对象: /* 成员变量和局部变量的区别? A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生 ...
- Java抽象与接口的区别
Java抽象与接口的区别 答案方式一.简单来说,1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 2.另外,实现接口的一定要实现接口里定义的所有 ...
- php抽象与接口的区别[转载]
来自:http://www.cnblogs.com/k5054/archive/2012/12/26/2834205.html 对于面向对象开发,抽象类与接口这两个东西是比较难理解的! 今天看了一整天 ...
- java学习笔记(基础篇)—抽象与接口的区别
抽象与接口的区别 一.抽象(abstract) 1. 抽象方法 1) 作用:定义规范 2) 抽象方法用来描述具有什么功能,但不提供实现. 3) 如果类中一个方法没有实现就要定义一个抽象方法. 2. 抽 ...
- Java进阶学习(6)之抽象与接口
抽象与接口 抽象 抽象函数 表达概念而无法实现具体代码的函数 抽象类 表达概念而无法构造出实体的类 有抽象函数的类也可以有非抽象函数 实现抽象函数 继承自抽象类的子类必须覆盖父类中的抽象函数 抽象 与 ...
- 2022-07-25 第四组 java之抽象、接口
目录 一.抽象类 1.概念 2.抽象类以及抽象方法格式定义 3.抽象类总结规定 二.接口 1.什么是接口 2.接口的定义 3.接口特性 4.抽象类和接口的区别 5.继承抽象类和实现接口的异同 6.规则 ...
- 《Java基础——抽象与接口》
Java基础--抽象与接口 一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...
- java抽象、接口 和final
抽象 一.抽象类:不知道是具体什么东西的类. abstract class 类名 1.抽象类不能直接new出来. 2.抽象类可以没有抽象方法. public abstract class USB { ...
随机推荐
- pom resource配置
maven pom配置资源resource, make时可自动发布到release目录的 \WEB-INF\classes 下. 解决使用idea时, 每次都需要配置资源文件的手动配置. 具体: &l ...
- 《Maven实战》关联实际工作的核心知识
通读了<Maven实战>这本书,由于在实际的工作中,对其有一定的操作上的经验.因此,再回头去通读这本书,就能够更加精准的把握里面的核心知识了. 以下我主要从两点去介绍之—— 1> m ...
- javascript下的arguments,caller,callee,call,apply示例及理解
(参考:http://justcoding.iteye.com/blog/589111) Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments ...
- Angular4 step by step.4
1.官方的模拟远程调用API接口没整出来,干脆自己使用 最新版本 .netcore2.1.0 preview 作为请求地址 2.直接上图懒得沾代码了,等完善后再开放所有源码: 3.使用了Chole.O ...
- [javaEE] 三层架构案例-用户模块(一)
用户注册登录注销 Servlet+JSP+javaBean+dom4j 分层结构: com.tsh.web com.tsh.service com.tsh.dao com.tsh.domain com ...
- encodeURI和 encodeURIComponent 的作用及应用
首先解释下 encodeURIComponent 的作用:将文本字符串编码为一个有效的统一资源标识符 (URI).为什么要用这个是因为我想把 username 整个当做参数传递给 CGI, 而不让 C ...
- MySQL 5.7 解压版 安装教程(图文详细)[Windows]
最近在学习中用到了MySQL数据库,在安装过程中遇到了不少问题,在翻了大半天百度后,问题基本都解决了,所以写一篇MySQL 5.7 解压版的图文详细安装教程. 至于为什么我会选择解压版而不是安装版,一 ...
- hdu 4628 Pieces 状态压缩dp
Pieces Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- 读EntityFramework.DynamicFilters源码_心得_单元测试03
上个星期我们只是显示了一个示例,怎么在EF的框架内,注入我们拓展的动态过滤器 第一步:安装EntityFramework.DynamicFilters 第二步:重写OnModelCreating方法 ...
- SQL SERVER ->> IDENTITY相关函数
IDENTITY函数 -- 只能用在SELECT INTO语句中,用于在插入数据的时候模拟IDENTITY属性的作用生成自增长值. ,) AS ID_Num INTO NewTable FROM Ol ...