抽象类
①、使用”abstract”关键字定义抽象类或抽象方法(不能有方法体)。
②、抽象类只能被继承,不能实例化,并且抽象方法必须在子类实现。
③、实现抽象方法的子类方法可见性不能低于抽象方法原定义。
④、子类实现抽象类时。必须全部的抽象方法都要实现,不能少或多。
<?php
header('content-type:text/html;charset=utf-8');
abstract class Person{
protected $name;
protected function __construct($name){
$this->name = $name;
}
public function getName(){
return $this->name;
}
abstract protected function setname($v);
}
class Student extends Person{
public function __construct($name){
parent::__construct($name);
}
public function setname($v){
$this->name = $v;
}
}
$student = new Student('张三');
echo '第一次赋值:'.$student->getName();
echo '<br>';
$student->setname('李四');
echo '第二次赋值:'.$student->getName();
接口
①、使用”interface”关键字定义接口,方法体必须为空,方法全部都是抽象方法。
②、接口方法的可见性必须是”public”。
③、类实现接口的关键字”implements”。
④、接口中只允许存在抽象方法和常量
<?php
header('content-type:text/html;charset=utf-8');
interface iCook{
public function setMeat($meat);
public function setVegetable($vegetable);
}
class Cook implements iCook{
public $meat;
public $vegetable;
public function __construct($meat,$vegetable){
$this->meat = $meat;
$this->vegetable = $vegetable;
}
public function setMeat($meat){
$this->meat = $meat;
}
public function setVegetable($vegetable){
$this->vegetable = $vegetable;
}
public function getMenu(){
return $this->vegetable.'炒'.$this->meat;
}
}
$cook = new Cook('猪肉','芹菜');
echo '第一道菜:'.$cook->getMenu().'<br>';
$cook->setMeat('牛肉');
$cook->setVegetable('西红柿');
echo '第二道菜:'.$cook->getMenu();