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)此外方法的调用方式必须匹配,即类型和所需参数数量必须一致
例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。

示例:

 1 abstract class Demo{
 2     prviate $param;
 3     public abstract function fun();//定义了一个抽象方法,必须重载使用
 4     public function test(){
 5     //...
 6     }
 7 }
 8
 9 class SubDemo extends Demo{
10     public function fun(){
11     //...
12     }
13 }

2、接口(interface)

接口与抽象类很像,都是约束作用,只是接口里面的方法全部是抽象的,且不需要使用abstract申明;
接口使用interface申明

特点:
1)接口使用interface申明
2)接口中的方法全部是抽象的,不需要使用abstract申明
3)接口不能被实例化,必须被引用(implements,同抽象类中的继承)使用
4)子类可以引用多个接口,用逗号(,)隔开

作用:
1)定义一个规范,具有约束性
2)使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容

注意:
1)要实现一个接口,使用implements操作符
2)类中必须实现接口中定义的所有方法,否则会报一个致命错误
3)类可以实现多个接口,用逗号来分隔多个接口的名称
4)实现多个接口时,接口中的方法不能有重名
5)接口也可以继承,通过使用extends操作符

示例:

1 interface Db{
2     public function select();
3     public function findAll();
4     public function find();
5     public function insert();
6     public function update();
7     public function delete();
8 }

3、多态的应用
对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为.
这使得同一个属性或行为在父类及其各个子类中具有不同的语义.
例如生活中的USB就可以实现多态功能:插入U盘和鼠标都能正常工作,且完成各自的工作,但内部肯定有一致的规范定义

示例:

 1 <?php
 2 //定义一个外围控制接口PCI
 3 interface PCI{
 4     //该PCI必须有以下功能
 5     public function init();
 6     public function stop();
 7 }
 8
 9 //定义主板类
10 class MainBorad{
11     public function work(PCI $m){//类型约束,必须传入对象
12         $m->init();
13         $m->stop();
14     }
15 }
16
17 //定义声卡引用PCI规范
18 class SoundCard implements PCI{
19     public function init(){
20         echo "声卡正在初始化...<br>";
21     }
22     public function stop(){
23         echo "声卡正在停止...<br>";
24     }
25 }
26
27 //定义网卡引用PCI规范
28 class NetworkCard implements PCI{
29     public function init(){
30         echo "网卡正在初始化...<br>";
31     }
32     public function stop(){
33         echo "网卡正在停止...<br>";
34     }
35 }
36
37 $sys = new MainBorad();
38 $sys->work(new SoundCard);//传入声卡对象
39 $sys->work(new NetworkCard);//传入网卡对象
40 ?>
时间: 2024-08-20 23:03:59

PHP面向对象05的相关文章

面向对象05

1. 使用 Function 创建函数与原来的方式创建函数 * Function 是使用字符串构建函数, 那么就可以在程序运行过程中构建函数 * 以前的函数必须一开始就写好, 再经过预解析, 一步一步的运行 * 假定从服务器那里拿到了 "[ 1, 2, 3, 4 ]" * 将数组形式的字符串, 转换成数组对象 * var arr = ( new Function( 'return ' + str + ';' ) )();2. 自调用函数3. eval 函数 * 将字符串当做代码指向4.

Java基础—面向对象05

1.final关键字  类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写. 关键字final,final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量.不能修饰构造方法.  final的特点:  final修饰类不可以被继承,但是可以继承其他类. final修饰的方法不可以被子类重写,但父类中没有被final修饰方法,子类重写后可以加final. final修饰的变量称为常量,这些变量只能赋值一次.而且终身不变 引用类型的变量值

java基础学习05(面向对象基础01--类实例分析)

面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过setter和getter设置和取得4.如果需要可以加入若干构造方法 5.再根据其它要求添加相应的方法6.类中的所有方法都不要直接输出,而是交给被调用处调用 Demo 定义并测试一个名为Student的类,包括属性有"学号"."姓名"以及3门课程"数学".

05面向对象基础

总结一下这两天的学习笔记,正所谓温故而知新嘛,希望能够更好的学习后面的新知识 1.面向对象概念面向对象三大特征:封装.继承.多态 2.类对象是引用传递把一个对象传递到方法中,传递的也是这个对象本身的引用,修改这个对象会影响外面的对象 3.null表示变量没有指向任何对象值类型(ValueType):数值类型(int.long.double等).boolean等基本类型,枚举.结构体的值是复制传递,不能为null;String不是值类型 4.局部变量和成员变量(1)局部变量必须初始化,成员变量声明

java基础学习05(面向对象基础02)

面向对象基础02 实现的目标 1.String类的使用 2.掌握this关键字的使用3.掌握static关键字的使用 String类 实例化String对象一个字符串就是一个String类的匿名对象,就是已经开辟了堆内存空间的并可以直接使用的对象.1.采用直接赋值的方式进行操作. String name = "zhangsan"; 使用这种方式,如果一个字符串已经被一个名称所引用,则以后再有相同的字符串声明时,就不会再开辟内存空间.2.直接调用String类的构造方法(public S

面向对象的三大特性之继承-基础知识总结------彭记(05)

面向对象的三大特性之继承: js中的某些对象没有一些需要的属性和方法,但是另外的对象有,那么拿过使用,就是继承. js中继承的实现方式: 1.混入式继承:通过循环将一个对象中的所有属性和方法混入到另外一个对象中: var me={ work:function(){ console.log('敲代码'): } }: var mayun={ money:9999999, car:'000', manager:function(){ console.log('管理巴巴...'); } } /*遍历,让

javascript高级编程笔记05(面向对象)

面向对象设计 es中有两种属性:数据属性和访问器属性 数据属性: 数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性 [[Configurable]]:表示能否通过delete删除属性从而重新第一属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认为true [[Enumerable]]:表示能否通过for-in循环返回属性,默认为true [[Writable]]:表示能否修改属性的值,默认为true [[Value]]:包含这个属性的数据值默认

.Net学习 第2季05 C#面向对象 Path类 File类

.Net 视频学习第2季 C#面向对象 面向对象 Path类 File类 Path类,命名空间IO,静态类 Path.GetFileName(str),返回文件路径中的文件名,返回值为string Path.GetFileNameWithoutExtension(str),返回文件路径中的文件名,不带扩展名,返回值为string Path.GetExtension(str),返回文件路径中的文件的扩展名,返回值为string Path.GetDirectoryName(str),返回文件所在的全

第05章(面向对象——中)

1 /***************** 2 ***第五章面向对象(中) 3 *******知识点: 4 **************1.多态 5 ******************1.1 概念 6 ******************1.2 实现方式 7 **************2.抽象类 8 ******************2.1 关键字 9 ******************2.2 概念定义 10 ******************2.3 使用 11 ************