结合网上文档和官方文档,自我测试总结心得,实践出真知,时间匆忙,写的不详请谅解!

结合实例分析:

<?php

header("Content-type:text/html;charset=utf-8");

abstract class People{

protected $age=22;

public $height=1.70;

abstract function work();

//抽象方法没有方法体,子类必须实现。

function run(){}

function People() //可以定义构造函数

{

echo "人类的平均身高".$this->height."<br/>";

}

}

abstract class student extends People{

//如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类

abstract function student_run(){}

}

class PhpTeacher extends student implements Common{

public $height=1.75;

//子类的属性访问控制必须和父类一样甚至更宽泛

/*function PhpTeacher()

{

echo "php程序员的平均身高".$this->height."<br/>";

}*/

function work(){ //抽象方法子类必须实现

echo "教授php";

}

function getAge()

{

echo $this->age;//继承父类可以访问父类的age

}

// function run(){

// echo "会跑步";

// }

function speakEnglish(){

echo "会说英语"."<br/>";

}

function drive($height)

{

echo $height."<br/>";

}

}


interface Common{

//所有的接口方法,实现接口的类必须都得实现

function speakEnglish();

//interface 是完全抽象的,只能声明方法,而且只能声明 public 的方法,不能声明 private 及 protected 的方法,不能定义方法体,也不能声明实例变量 不能加abstract

function drive($args);

}

$phpTeacher = new PhpTeacher();

$phpTeacher ->work();

echo "<br/>";

$phpTeacher->getAge();

/*

总结:

抽象类

PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。 这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的。

抽象类的特点:

  • 抽象类不能实例化,只能被继承。

  • 抽象类不一定有抽象方法,有抽象方法的类,一定是抽象类。

  • 抽象方法的可见性不能是private

  • 抽象方法在子类中,需要重写。

什么时候需要用抽象类?

  • 有个方法,方法体不知如何写,子类中还必须有这个方法时,封装成抽象方法,类为抽象类。

  • 控制子类中必须封装某些方法时,可以用抽象方法。

  • 当需要控制类只能被继承,不能被实例化时。

对象接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性

接口的继承(extends):

  • 接口继承接口 interface接口名称 extends 父接口名称

注意:类的继承是单继承(只能有一个父类),但接口的继承却是多继承,类对接口的实现也是多实现。

接口的实现(implements):

  • 类实现接口 class类名implements接口名称1,接口名称2, ...

继承类同时实现接口:

类继承父类同时实现接口 class类名extends父类名 implements 接口名称


抽象类和接口的区别

  • 接口是一种特殊的抽象类,接口中只包含抽象方法,没有成员属性。

  • 类实现(implements)接口时,必须完全实现接口中的所有方法;类继承(extends)抽象类时,只需对需要用到的抽象方法进行重写。

  • 抽象类只能单继承,但接口却是多继承,类对接口的实现也是多实现。

*/

?>

参考链接:http://php.net/manual/zh/language.oop5.abstract.phphttp://php.net/manual/zh/language.oop5.interfaces.phphttp://www.jb51.net/article/47485.htmhttp://blog.csdn.net/lamp_yang_3533/article/details/50830214

更多相关文章

  1. 您是否认为PHP中的错误形式是在类方法中访问超级全局变量?
  2. 一个简易的PHP读取CSV文件的方法
  3. 用PHP计算字符串中元音的简单方法?
  4. 天气预报API接口大全
  5. php项目防止sql注入的方法
  6. PHP 创建对象的两种方法
  7. 强制动态加载的类来扩展或实现接口
  8. 仅获取单元素php数组中的值的最佳方法。
  9. 在CodeIgniter中包含视图的最佳方法。

随机推荐

  1. android常用权限
  2. Eclipse adt Android Test Project
  3. Android Wear - App Structure for Andro
  4. android 加密字符串
  5. Android WebView对https无响应
  6. [Linux][Android] Analyzing Memory Usag
  7. Android FragmentManager之beginTransact
  8. Android # 源码下载相关
  9. Android Http RequestCache缓存策略
  10. android (19)