面向对象设计_第1页
面向对象设计_第2页
面向对象设计_第3页
面向对象设计_第4页
面向对象设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP面向对象的设计05主讲:邮箱:微博:课前复习类的封装封装后属性和方法的访问魔术方法:__set()、__get()、__isset()、__unset()的使用预习检查类的继承?本章任务1.面向对象的介绍2.如何抽象一个类3.通过类实例化对象4.封装性5.继承性6.常见的关键字和魔术方法7.抽象类与接口8.多态性的应用9.命名空间7.抽象类与接口7.1抽象方法和抽象类7.2接口技术7.1抽象方法和抽象类在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口。而抽象方法就是为了方便继承而引入的。当类中有一个方法,他没有方法体,也就是没有花括号,直接分号结束,象这种方法我们叫抽象方法,必须使用关键字abstract定义。如:publicabstractfunctionfun();包含这种方法的类必须是抽象类也要使用关键字abstract加以声明。(即使用关键字abstract修饰的类为抽象类)抽象类的特点:不能实例化,也就new成对象若想使用抽象类,就必须定义一个类去继承这个抽象类,并定义覆盖父类的抽象方法(实现抽象方法)。其实抽象类对于子类(实现类),有一个约束的作用,含有抽象方法的类肯定是抽象类,但是不是所有的抽象类都必须包含抽象方法。<?php

//声明一个抽象类,要使用abstract关键字标识

abstract

classPerson{

protected

$name;

//声明一个存储人的名字的成员

protected

$country;

//声明一个存储人的国家的成员

pubicfunction__construct($name="",

$country="china")

{

$this->name=

$name;

$this->country=

$country;

}

//在抽象类中声明一个没有方法体的抽象方法,使用abstract关键字标识

publicabstract

functionsay();

//在抽象类中声明另一个没有方法体的抽象方法,使用abstract关键字标识

publicabstract

functioneat();

//在抽象类中可以声明正常的非抽象的方法

publicfunctionrun(){

echo

"使用两条腿走路<br>";

//有方法体,输出一条语句

}

}<?php

//声明一个类去继承抽象类Person

classChineseManextendsPerson{

//将父类中的抽象方法覆盖,按自己的需求去实现

publicfunctionsay()

{

echo

$this->name."是".$this->country."人,讲汉语<br>";

//实现的内容

}

//将父类中的抽象方法覆盖,按自己的需求去实现

publicfunctioneat()

{

echo

$this->name."使用筷子吃饭<br>";

//实现的内容

}

}

//声明另一个类去继承抽象类Person

classAmericansextendsPerson{

//此处省略.......

}

$chineseMan

=

newChineseMan("高洛峰",

"中国");

//将第一个Person的子类实例化对象

$americans

=

newAmericans("alex",

"美国");

//将第二个Person的子类实例化对象

$chineseMan

->say();

//通过第一个对象调用子类中已经实例父类中抽象方法的say()方法

$chineseMan

->eat();

//通过第一个对象调用子类中已经实例父类中抽象方法的eat()方法

$americans

->say();

//通过第二个对象调用子类中已经实例父类中抽象方法的say()方法

$americans

->eat();

//通过第二个对象调用子类中已经实例父类中抽象方法的eat()方法7.2接口技术PHP与大多数面向对象编程语言一样,不支持多重继承,也就是说每个类只能继承一个父类。为了解决这个这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列函数。如果在一个抽象类中包含的只有抽象方法,可以将其定义为interface(接口),用implements(实现)关键字使用它。

定义格式:

interface接口名称{

//常量成员(使用const关键字定义) //抽象方法(不需要使用abstract关键字) }

使用格式:class类名implements接口名1,接口名2{......}

当一个类在继承了一个接口后,它必须实现即覆盖该接口的所有方法才可以实例化使用,否则即为抽象类。<?php

//声明一个接口使用interface关键字,One为接口名称

interfaceOne{

constCONSTANT=

'CONSTANTvalue';

//在接口中声明常量成员属性和在类中声明一样

functionfun1();

//在接口中声明一个抽象方法“fun1()”

functionfun2();

//在接口中声明另一个抽象方法“fun2()”

}

//声明一个抽象类去实现接口One中的第二个方法

abstract

classThreeimplementsOne{

functionfun2()

{

//只实现接口中的一个抽象方法

//具体的实现内容由子类自决定

}

}

//声明一个类实现接口One中的全部抽象方法

classFourimplementsOne{

functionfun1()

{

//实现接口中第一个方法

//具体的实现内容由子类自决定

}

functionfun2()

{

//实现接口中的第二个方法

//具体的实现内容由子类自决定

}

}抽象类与接口的区别定义抽象类表示该类中可能已经有一些方法的具体定义。接口就仅仅只能定义各个方法的界面,不能有具体的实现代码在成员方法中。用法抽象类是子类用来继承的,当父类已有实际功能的方法时,该方法在子类中可以不必实现。实现一个接口,必须实现接口中所有定义的方法,不能遗漏任何一个。8.多态性的应用对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。

例如:"几何图形"的"绘图"方法,"椭圆"和"多边形"都是"几何图"的子类,其"绘图"方法功能不同。<?php

//定义一个USB接口,让每个USB设略都遵守这个规范

interfaceUSB{

functionrun();

}

//声明一个电脑类,去使用USB设置

classComputer{

//电脑类中的一个方法可以应用任何一种USB设备

functionuseUSB($usb)

{

$usb

->run();

}

}

$computer

=

newComputer;

//实例化一个电脑类的对象

$computer

->useUSB(

newUkey()

);

//为电脑插入一个USB键盘设备,并运行

$computer

->useUSB(

newUmouse()

);

//为电脑插入一个USB鼠标设备,并运行

$computer

->useUSB(

newUstore()

);

//为电脑插入一个USB存储设备,并运行<?php

//扩展一个USB键盘设置,实现USB接口

classUkeyimplementsUSB{

publicfunctionrun()

{ //按键盘的功能实现接口中的方法

echo

"运行USB键盘设备<br>";

}

}

//扩展一个USB鼠标设置,实现USB接口

classUmouseimplementsUSB{

publicfunctionrun()

{ //按鼠标的功能实现接口中的方法

echo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论