抽象类练习
abstract class a{
public $name;
public $age;
public function __construct($name,$age)
{
$this->name =$name;
$this->age = $age;
}
abstract protected function getInfo();
abstract protected function getInfo2($name);
public function getInfo3()
{
return '<hr>getInfo3:'.$this->name;
}
}
class b extends a {
public function getInfo(){
return '<hr>getinfo:'.$this->name .'---'.$this->age;
}
public function getInfo2($name)
{
$this->name = $name;
}
}
$b = new b('rambo','18');
echo $b->getInfo3();
echo $b->getInfo();
echo $b->getInfo2('ouyang');
echo $b->getInfo3();
接口练习
interface v{
const country = '中国';
public function setFull($fuel);
public function setPurpose($purpose);
}
class Car implements v{
public $fuel;
public $purpose;
public function __construct($fuel='汽油',$purpose='家用')
{
$this->fuel = $fuel;
$this->purpose = $purpose;
}
public function setFull($fuel)
{
$this->fuel = $fuel;
}
public function setPurpose($purpose)
{
$this->purpose = $purpose;
}
public function getInfo(){
return $this->fuel . $this->purpose . '车';
}
}
$car = new Car();
echo $car -> getInfo();
echo '<hr>';
$car ->setFull('新能源');
$car ->setPurpose('出租');
echo $car -> getInfo();
抽象类
- 1,
abstract
定义抽象方法、抽象类 - 2,抽象类只能被继承,不能实例化,且抽象方法都必须在子类复写
- 3,类中只要有一个抽象方法,该类就必须声明为抽象类
- 4,实现抽象方法的子类方法可见性不能低于父抽象方法的可见性
- 5,抽象方法不能有方法体,不能有
{}
- 6,在实际开发中,通常并不会直接使用一个父类/超类,而是在父类中定义一些方法声明
- 7,并且确信该方法肯定是会被子类重写的,父类中没必要实现,只要给一个方法编写规范即可
- 8,这个规范包括方法的名称,参数列表等,具体实现就全部交给子类去完成了
- 9,相当于公司的部门主管,接到老板的任务,只把属于自己的部分做了,其他部分,设置一个标准交给下属去完成
- 10,父类的构造方法可见性为
protected
时,子类不会自动继承, 必须手动重写构造方法,可以用parent::
手动调用
接口
- 1,
interface
指定某个类必须实现的方法,但不需要定义方法的具体实现过程 - 2,接口中仅允许出现方法和常量
- 3,接口方法的可见性必须是
public
,且方法体必须是空的 - 4,接口是类的代码模板,可以像类一样有父子继承关系,例如:父接口,子接口
- 5,
implements
类实现接口的关键字 - 6,如果仅是部分实现接口中的方法,请用一个抽象类来实现他
- 7,接口中的方法,必须全是抽象方法
抽象类和接口的区别
- 抽象可以有普通方法,成员变量
- 接口不可以有普通方法,不可以有成员变量