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 ...
随机推荐
- Linux最常用命令之cd和ls
为什么说是最常用的命令呢,因为从普及程度看,即使不怎么接触过Linux系统的人,大多数都会知道这两个命令:而从使用频率看,这两个命令也是当之无愧的首位.现在我们就来看看这两个命令. cd 篇:cd 即 ...
- Combination Sum II Combinations
https://leetcode.com/problems/combination-sum-ii/ 题目跟前面几道题很类似,直接写代码: class Solution { public: vector ...
- WinForm/Silverlight多线程编程中如何更新UI控件的值
单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么 ...
- 自定义struts实现
一:struts2运行机制: Tomcat一启动,一些信息就已经加载完成,例如StrutsPrepareAndExecuteFilter加载的那些strut.xml以及Action的class类文件 ...
- gulp插件(gulp-jmbuild),用于WEB前端构建
源码地址:https://github.com/jiamao/gulp-jmbuild https://github.com/jiamao/gulp-jmbuild gulp-jmbuild gulp ...
- asp.net linux 环境部署, jexus
cd /tmpwget linuxdot.net/down/jexus-5.8.1-x64.tar.gztar -zxvf jexus-5.8.1-x64.tar.gzsudo mv jexus /u ...
- .Net Core CLI–Ubuntu 14安装
sudo sh -c 'echo "deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ trusty main&q ...
- 我的ORM之十三 -- 性能参数
我的ORM索引 测试环境 台式机: 主板:映泰Z77 CPU:i5 3470(3.2GHz) 内存:DDR3 1600 8G(单条) 硬盘:创见 SSD 256G ORM从过程上,可以分两个大的部分: ...
- 【C语言学习】《C Primer Plus》第1章 概览
学习总结 1.C语言于1972年由贝尔实验室的Dennis Ritchie在与Ken Thompson一起设计UNIX操作系统的时候开发的.的的设计构想来源于Ken Thompson的B语言.Anyw ...
- JavaScript使用DeviceOne开发实战(六)点墨真实案例
qq群里的yan用户开发的App,基本完工大家可以看看 安装二维码是 QQ群:365443130