您的位置:首页 > 编程语言 > PHP开发

PHP接口&抽象类验证笔记

2015-11-18 19:53 656 查看
抽象类可以不含抽象方法,抽象类中可以有抽象的方法和非抽象的方法。但是接口中的所有方法必须是抽象的。

但是含抽象方法的类一定是抽象类(或者接口)

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是公开、抽象的。
接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

抽象类验证:

<?php
/**
*
* 抽象类中不一定需要有抽象方法
* 提供一个规范,继承该抽象类的所有的类--
* 都要实现抽象类中定义的方法,以此保证所有的子类都有相似的行为
*/
abstract class EventGenerator {
private $observers = array();
function addObserver(Observer $observer)
{
$this->observers[] = $observer;
}
function notify()
{
foreach($this->observers as $observer)
{
$observer->update();
}
}
abstract protected function Insert();//抽象方法里面不能有方法体
}
//子类必须完全实现这个抽象类中所有的抽象方法
class Test extends EventGenerator{
function t(){
return "test";
}
//实现父类抽象方法
public function Insert(){
//to do
}
}
$test = new Test();
echo $test->t();
//$obj = new EventGenerator();//不能从抽象类创建对象,它的意义在于被扩展
?>

接口验证:

<?php
/**
interface和abstract class的比较及选择参照:
1. interface和abstract class都不能实例化,但可以声明引用变量,abstract class中子类必须对父类的抽象方法进行重写
2. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。
3. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。
*/
interface Observer
{
function update($event_info);
function Insert();//接口方法中不能含有方法体
}
class Test implements Observer{
public function t(){
return 'test';
}
function update($event_info){
return "aaa";
}
function Insert(){
//to do
}
}
$test = new Test();
echo $test->t();
//$obj = new Observer();//不能从抽象类创建对象,它的意义在于被扩展
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: