PHP面向对象05_接口与多态
抽象类与接口
2014-9-2 9:14:32
摘要:
1、抽象类(abstract)
2、接口(interface)
3、多态的应用
1、抽象类(abstract)
特点:
1)抽象类使用abstract关键字申明
2)抽象类中可以没有抽象方法
3)任何一个类,如果它里面至少有一个抽象方法,那么这个类就必须被声明为抽象的
4)抽象方法没有方法体,直接分号(;)结束,,使用abstract关键字申明
5)抽象方法不能被实例化,只能被继承(extends);子类必须重载抽象类中所有抽象方法
作用:
1)定义一个规范,具有约束性,强制要求子类定义这些方法(父类中的抽象方法)
注意:
1)继承一个抽象类的时候,子类必须定义父类中的所有抽象方法
2)这些重载的方法的访问控制必须和父类中一样(或者更为宽松)
例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的
3)此外方法的调用方式必须匹配,即类型和所需参数数量必须一致
例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。
示例:
abstract class Demo{
prviate $param;
public abstract function fun();//定义了一个抽象方法,必须重载使用
public function test(){
//...
}
}
class SubDemo extends Demo{
public function fun(){
//...
}
}
2、接口(interface)
接口与抽象类很像,都是约束作用,只是接口里面的方法全部是抽象的,且不需要使用abstract申明;
接口使用interface申明
特点:
1)接口使用interface申明
2)接口中的方法全部是抽象的,不需要使用abstract申明
3)接口不能被实例化,必须被引用(implements,同抽象类中的继承)使用
4)子类可以引用多个接口,用逗号(,)隔开
作用:
1)定义一个规范,具有约束性
2)使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容
注意:
1)要实现一个接口,使用implements操作符
2)类中必须实现接口中定义的所有方法,否则会报一个致命错误
3)类可以实现多个接口,用逗号来分隔多个接口的名称
4)实现多个接口时,接口中的方法不能有重名
5)接口也可以继承,通过使用extends操作符
示例:
interface Db{
public function select();
public function findAll();
public function find();
public function insert();
public function update();
public function delete();
}
3、多态的应用
对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为.
这使得同一个属性或行为在父类及其各个子类中具有不同的语义.
例如生活中的USB就可以实现多态功能:插入U盘和鼠标都能正常工作,且完成各自的工作,但内部肯定有一致的规范定义
示例:
<?php
//定义一个外围控制接口PCI
interface PCI{
//该PCI必须有以下功能
public function init();
public function stop();
} //定义主板类
class MainBorad{
public function work(PCI $m){//类型约束,必须传入对象
$m->init();
$m->stop();
}
} //定义声卡引用PCI规范
class SoundCard implements PCI{
public function init(){
echo "声卡正在初始化...<br>";
}
public function stop(){
echo "声卡正在停止...<br>";
}
} //定义网卡引用PCI规范
class NetworkCard implements PCI{
public function init(){
echo "网卡正在初始化...<br>";
}
public function stop(){
echo "网卡正在停止...<br>";
}
} $sys = new MainBorad();
$sys->work(new SoundCard);//传入声卡对象
$sys->work(new NetworkCard);//传入网卡对象
?>
PHP面向对象05_接口与多态的更多相关文章
- Java 面向对象之接口、多态
01接口的概念 A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成 ...
- Java面向对象(接口、多态)
面向对象 今日内容介绍 u 接口 u 多态 第1章 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的 ...
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...
- oop面向对象【接口、多态】
今日内容 1.接口 2.三大特征——多态 3.引用类型转换 教学目标 1.写出定义接口的格式 2.写出实现接口的格式 3.说出接口中成员的特点 4.能够说出使用多态的前提条件 5.理解多态的向上转型 ...
- Java面向对象(二) 接口、多态和泛型
一.接口 二.多态 多态是同一个行为具有多个不同表现形式或形态的能力. 2.1 类型转换 转换方式 隐式 向上转型 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换 对于引用变量,子类可被转 ...
- 11_Java面向对象_第11天(接口、多态)_讲义
今日内容介绍 1.接口 2.多态 01接口的概念 * A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的"类". 接口只描述所应该具备的方法,并没有具 ...
- Java面向对象之类、接口、多态
Java面向对象之类.接口.多态 类 class Person { // 实例属性 int age; String name; // 类属性 static int v = 1; // 构造器 publ ...
- C#面向对象(三)接口实现多态
一.如何用接口实现多态? 1.定义一个接口. using System; using System.Collections.Generic; using System.Linq; using Syst ...
随机推荐
- UVaLive 7143 Room Assignment (组合数+DP)
题意:有 n 个客人,m个房间,每个房间可住ci个人,这 n 个人中有 t 对双胞胎,sum{ci} = n 问你有多少种住房方法. 析:计数DP,dp[i][j] 表示前 i 个房间,还剩下 j ...
- 置入式模型inclusion model和显示具现化
1.置入式模型 链接错误: 大多数非模板程序代码的组织如下:A,类声明在头文件中: B:全局变量和非inline函数在cpp文件中定义 但是,如果模板程序也这样组织,则会出错.原因在于:函数模板的定义 ...
- HP iLo2 试用序列号
HP iLo2 试用序列号 2 条回复 32Q8W-GKHTR-NPDKY-5CD79-T525H hp的ilo2功能实在太有用了,不用往那个恶劣的机房跑了,系统重装也直接远程完成. 这个试用序列号用 ...
- Windows文件系统漏洞
1.Windows中很有用的文件替换命令,绕过文件保护用来替换文件的replace,连正在使用的文件也能替换.非常无敌. 比如:在C:下建一个目录,c:aaa 然后复制一首mp3到c:aaa并命名为c ...
- SIFT中的尺度空间和传统图像金字塔
SIFT中的尺度空间和传统图像金字塔 http://www.zhizhihu.com/html/y2010/2146.html 最近自己混淆了好多概念,一边弄明白的同时,也做了一些记录,分享一下.最近 ...
- [转]c++中vector的使用
C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...
- Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍
1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...
- RHEL6.5 删除桌面启动器(计算机/Home/回收站)
首先,安装gconf-editor以获得gconftool-2命令 终端命令: gconftool-2 --set /apps/nautilus/desktop/computer_icon_visib ...
- day10---multiprocess 多进程
multiprocess Queue \ Pipe 只是实现进程间数据的传递 Manager 实现了进程间数据的共享,即多个进程可以修改同一份数据 进程模块 multiprocessing #! ...
- 运维自动化工具---Puppet
案例环境:-----------------------------------------------------------------主机 操作系统 IP地址 主要软件--------- ...