类的继承与多态
PHP 5 引入了新的对象模型(Object Model)。完全重写了 PHP 处理对象的方式,允许更佳性能和更多特性。继承便是其中之一,继承是存在于面向对象程序设计中的两个类之间的一种关系,是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂、更深入的开发。
当一个类拥有另一个类的所有数据和操作时,就称这两个类之间具有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。在Php语言程序设计类头定义中用extends表明子类与父类的继承关系。
在面向对象的程序设计中,采用继承的方式来组织设计系统中的类,可以提高程序的抽象程度,更接近人的思维方式,使程序结构更清晰并降低编码和维护的工作量。
16.1.1 如何继承一个类
PHP5中一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。注意PHP是单继承,即一个类不能继承多个父类,只能继承一个父类。
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,但是当父类定义方法时使用了 final 关键字时子类不能覆盖。子类可以通过 parent:: 来访问被覆盖的方法或成员。
下面我们通过列子做具体的演示。
<?php
class BaseClass
{
//构造函数
function __construct()
{
print "调用父类构造函数 <hr>\n";
}
//普通成员函数
function function1()
{
print "父类成员函数1<hr> \n";
}
}
class ChildClass extends BaseClass
{
}
$child=new ChildClass(); //新建实例
$child->function1(); //继承父类成员函数
?>
从程序16.1.1-inherite.php中我们可以看出,父类BaseClass实现了成员方法function1(),子类ChildClass通过关键字extends继承了父类的方法,通过实例直接调用$child->function1()。注意:子类实例化时会自动调用父类构造方法。
下面我们来看一个较为复杂的例子,程序定义三个类为Vechile,Car,Plane,Car和Plane通过关键字extends继承了父类Vechile的成员和方法,并且各自扩展了自己的成员和对应的方法,仔细阅读代码我们就会发现继承在实际编码的作用。
<?php
class Vehicle
{
public $name; //名称
public $speed; //速度
//构造函数
function __construct($name="car",$speed=250)
{
$this->name=$name;
$this->speed=$speed;
print "调用交通工具构造函数<hr>\n";
}
//设置运行速度
function setSpeed($speed=200)
{
$this->speed=$speed;
print "设置速度成功<hr>\n";
}
//显示当前速度
function getSpeed()
{
print "当前速度为:<br>";
print $this->speed;
print "<hr>";
}
//显示当前名称
function getName()
{
print "工具名称为this->name <hr>";
}
}
class Car extends Vehicle
{
public $produceCountry;
//构造函数
function __construct($name="car",$speed="250")
{
parent::__construct($name,$speed);
print "调用汽车构造函数 <hr>\n";
}
//设置生产国家
function setCountry($country)
{
$this->produceCountry=$country;
print "成功设置生产国家为this->produceCountry <hr>";
}
}
class Plane extends Vehicle
{
public $maxPassenger; //最大乘客数
//构造函数
function __construct($name="flight",$speed="350")
{
parent::__construct($name,$speed);
print "调用飞机构造函数 <hr>\n";
}
//设置最大人数
function setMaxPassenger($max=555)
{
$this->maxPassenger=$max;
print "成功设置飞机最大乘客数为 $this->maxPassenger <hr>";
}
}
$benz=new Car("奔驰505",300);//实例化
$benz->getName(); //获取名称
$benz->getSpeed(); //获取速度
$benz->setSpeed(350);// 重新设置速度
$benz->getSpeed();// 获取速度
$benz->setCountry("德国");// 设置生产国家
$boen=new Plane("波音747","600");//实例化
$boen->getName();// 获取名称
$boen->getSpeed();// 获取速度
$boen->setMaxPassenger(1200);//设置最大乘客数
?>
此文章由 http://www.ositren.com 收集整理 ,地址为:
http://www.ositren.com/htmls/29986.html