再谈PHP的抽象方法、抽象类、接口。多态的表现形式

关于daophp的抽象类中的抽象自方法,以有下的资料:bai
① 抽象du方法只有声明,zhi没dao有方法的实现内容;
② 抽象方法没有 {},而采用; 结束;
③ 在一个类中,只要有一个抽象方法,这个类必须被声明为抽象类;
④ 抽象方法在子类中必须被重写。
从你的代码来看,class aii继承自抽象类,但没有实现抽象方法,而且在抽象类的定义中,也不符合上面第②条的约定:
{}就是函数体,也就是body。
Abstract function ai::ad() cannot contain body 其实也是指出这一点:不能包含{},即使这是个空的。

 

<?php
//abstract 抽象类 只要有一个抽象方法就是抽象类 使用抽象类,必须把每个抽象方法都实现
//interface 接口 所有的方法都是抽象方法,没有方法体。

// interface jiekou {
// //接中必须是常量成员
// const JKNAME = “接口名称”;
// function sayjk(){}
// function sayjkm(){}
// }

abstract class Usb{
public $name;
protected $old;
private $zy;

function __construct($name=””,$old=””,$zy=””){
$this->name=$name;
$this->old=$old;
$this->zy=$zy;
}

abstract function setusb();
abstract function gousb();

function getusb(){
echo “getusb”;
}

function __destruct(){
echo “析构方法”;
}
}

//抽象方法只是一个规范,实现多态。
class telusb extends Usb{
function setusb(){
echo “重载父类的抽象方法”;
}
function gousb(){
echo “重载父类的抽象方法”;
}
function gotow(){
echo “gotow…..”;
}
}

$telusb = new telusb(“111″,”222″,”333”);
$telusb -> setusb();

 

抽象类中,可以有属性,公用方法,抽象方法。 实例化子类的时侯,要实现所有的父类的抽象方法,这期间就可以访问父类的私有属性并且赋值。

abstract class jiuke{
private $name;
abstract function hlw();
abstract function jsqc();
abstract function sp();
function say(){
echo “jkstq”;
}
}

class sl extends jiuke{
function hlw(){
return $this->name=”wulei”;
}
function jsqc(){
return $this->name=”jliue”;
}
function sp(){
return $this->name=”jliue”;
}

}

$sl = new sl();
echo $sl->hlw();

再谈PHP的抽象方法、抽象类、接口。多态的表现形式》有1条评论

发表评论