发布时间:2014-05-08 点击次数: 次 作者: 来源: Tags: |
在PHP中不能定义重名的函数,也包括不能在同一个类中定义重名的方法,
载。但在子类中可以定义和父类同名的方法,因为父类的方法已经在子类中存在,
把从父类中继承过来的方法重写.
所以也就没有方法重
这样在子类中就可以
子类中重载父类的方法就是在子类中覆盖从父类中继承过来的方法,父类中的方法被子类继承过来
不就可以直接使用吗?为什么还要重载呢?因为有一些情况是我们必须要扭盖的。例如.有一个“鸟”
类,在这个类中定义了鸟的通川方法“飞翔”。将“鸵鸟”类作为它的子类,就会将“飞翔”的方法继
承过来,但只要一调用“鸵鸟”类中的这个“飞翔”方法,鸵鸟就会飞走。虽然鸵鸟是不会飞的,但其
他特性都具有“鸟”类的特性,所以在声明“鸵鸟”类时还是可以继承“鸟”类的,但必须在“鸵鸟即
类中将从“鸟”类中继承过来的“飞翔”方法改写,就需要在子类中重载父类中的方法。
在下面的例子中,声明的Person类中有一个“说话”方法,Student类继承Person类后可以直接使
用“说话”方法。但Person类中的“说话”方法只能说出它自己的成员属性,而Student类对Person
类进行了扩展,多添加了几个新的成员属性。如果使用继承过来的“说话”方法,也只能说出从Person
类中继承过来的成员属性。而如果在子类Student中再定义一个新的方法用于“说话”,则一个“学生”
就有两种“说话”的方法,显然不太合理。所在在Student类中也定义了一个和它的父类Person中同名
的方法,将其覆盖后重写。代码如下所示:
//声明一个人类.定义人所具有的一些其本的属性和功能成员,作为父类
滋飞,
<?php
class Person{ protected Sname;
protected Ssex;
protected匀唱.;
//声明一个存储人的名字的成员
11声明一个存储人的性别的成员
//声明一个存储人的年龄的成员
function we construct(Sname-.’ , Ssex.-男.,Sage川
$山运>name一Sname;
Sthis->sex - Ssex;
Sthis->age - Sage;
乡
//构造方法用来创建对象并初始化成员属性
I/为成员属性name在创建对象时斌初值
11为成员属性sex在创建对象时赎初值
//为成员属性ag.在创建对象时从初值
function say(){
刀在人类中声明一个通用的说话方法,介绍一下自己
echo“我的名字叫:".Sthis-)'name.:性别:".Sthis->sex.".我的年龄是:".Sthis-:w,.". b";
class Student extends Person
private Sschool;
11声明一个学生类,使用extends关镇字扩展(继承)Person类
//在学生类中声明一个所在学校schoo】的成员属性
//砚盖父类中的构造方法.在参数列表中多添加一个学校属性,用来创建对象井初始化成员属性
function es construct(Sname-"", Ssex-"男一,Sage-l, $school-"")《
Sthis->name - Snarne; N为成员属性name在创建对象时从初值
Sthis->sex - Ssex;
Sthis->age - Sage.
Sthis->school=$school;
11为成员属性sex在创建对象时斌初值
//为成员属性as.在创建对象时从初值
//多添加一条为子类中折扩展的成员属性从初值
function study()《
刀在学生类中声明一个学生可以学习的方法
echo Sthis->nam‘一正在".Sthis->school."学习‘肠夕,;
二定义一个和父类中同名的方法,将父类中的说话方法。,井重写,多说出所在的学。名称
functi黑准品名字叫:".Sthi‘二.。.性别:" Sthis->sex ".,的年龄是:".Sthia->age.".在:Sthis->achool."
学校上学劝户N;
》
}
Sstudent new Studen叹一张三…男一,20二edu");
Sstudent->sayO;
//创建一个学生对象,井多传一个学校名称参数
//调用学生类中扭盖父类的说话方法