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 ...
随机推荐
- while语句
<?php $num=10;//被除数 $cs=2; $str=""; while ($num !=0) { $ys=$num % $cs ...
- LInux javac时, 提示command not found
这个是我之前看了很多的论坛发现的问题,我想了很久也没有发现问题,明明路径都是对的,配置文件也没有错误,为什么最后却只有执行java好使,但是执行javac不好使 因为java分两个版本一个是jre,一 ...
- 【分块打表】bzoj1662 [Usaco2006 Nov]Round Numbers 圆环数
#include<cstdio> using namespace std; #define BN 380000 const int table[]={0,185815,378154,561 ...
- Spring整合MyBatis
前言:MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用 ...
- 解决 IE 6/7 中console对象兼容性问题
话不多说,直接上代码 (function (){ //创建空console对象,避免JS报错 if(!window.console) window.console = {}; var console ...
- 最新基于adt-bundle-windows-x86的android开发环境筹建
最新基于adt-bundle-windows-x86的android开发环境搭建 某系统要配套做一个android客户端,来一次android开发环境快速搭建,系统Win7,具体步骤如下: 1.下载j ...
- struts2中jsp前台传值到后台action的方法(转)
在Struts2中jsp前台传值到action后台的方法 分类: java2012-02-28 13:58 2171人阅读 评论(1) 收藏 举报 actionstrutsjspgetterstrin ...
- PYTHON学习之路_PYTHON基础(8)
学习内容: Python模块介绍 1.经典类 or 新式类 2.抽象接口 3.静态方法.类方法.属性方法 4.反射 5.异常处理 6.socket编程初识 7.用socket实现get.put文件等功 ...
- C#学习之Stream
上节课老师主要讲了stream及其一些运用和实例,下面我们就来讨论讨论Stream. 我们知道,C#中常用的stream有文件流(FileSteam),内存流(MemoryStream),压缩流(GZ ...
- leetcode Insertion Sort List
题目:Sort a linked list using insertion sort. 代码: /** * Definition for singly-linked list. * struct Li ...