Correcting teacher:天蓬老师
Correction status:unqualified
Teacher's comments:没注释,没总结, 没手写
抽象类
1,abstract定义抽象方法、抽象类
2,抽象类只能被继承,不能实例化,且抽象方法都必须在子类复写
3,类中只要有一个抽象方法,该类就必须声明为抽象类
4,实现抽象方法的子类方法可见性不能低于父抽象方法的可见性
5,抽象方法不能有方法体,不能有{}
6,在实际开发中,通常并不会直接使用一个父类/超类,而是在父类中定义一些方法声明
7,并且确信该方法肯定是会被子类重写的,父类中没必要实现,只要给一个方法编写规范即可
8,这个规范包括方法的名称,参数列表等,具体实现就全部交给子类去完成了
9,相当于公司的部门主管,接到老板的任务,只把属于自己的部分做了,其他部分,设置一个标准交给下属去完成
10,父类的构造方法可见性为protected时,子类不会自动继承, 必须手动重写构造方法,可以用parent::手动调用
接口
1,interface 指定某个类必须实现的方法,但不需要定义方法的具体实现过程
2,接口中仅允许出现方法和常量
3,接口方法的可见性必须是public,且方法体必须是空的
4,接口是类的代码模板,可以像类一样有父子继承关系,例如:父接口,子接口
5,implements 类实现接口的关键字
6,如果仅是部分实现接口中的方法,请用一个抽象类来实现他
7,接口中的方法,必须全是抽象方法
抽象类和接口的区别
抽象可以有普通方法,成员变量
接口不可以有普通方法,不可以有成员变量
抽象类练习
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();