PHP面向对象之抽象

<?php
//PHP 抽象类 接口

/**
* @author bin
* date:14 / 6 / 8
*
*/
//接口
interface Animal{
//public $name; 不允许
//public static $name; 不允许
const AGE = 100;//可以定义常量
public function voice();
public function showColor();
}

interface Water{
public function showInfo();
}
class Dog_bobo implements Animal,Water{
public function __construct(){
self::showColor();
self::voice();
self::showInfo();
}
public function showInfo(){
echo "<br>喝水不忘挖井人<br>";
}
public function voice(){
echo "我的叫声是 汪汪汪~~~~";
}
public function showColor(){
echo "我是一条黑色的狗";
}
}

class Cat_bobo implements Animal{
public function __construct(){
self::showColor();
self::voice();
}
public function voice(){
echo "我的叫声是 喵喵喵~~~~";
}
public function showColor(){
echo "我是一条黑色的猫";
}
}
$dog = new Dog_bobo();
$Cat = new Cat_bobo();

//实际上 抽象类 面向对象的重要思想,其实对多态的最好支持;
//接口中不能有非抽象的方法
//接口的方法 成员变量不能用private 修饰
// 抽象类 多态的表现
/* abstract class Person{
public $name;
//加abstract 就可以不用写方法体
// 抽象类里定义的方法 它子类都必须重写定义的方法
abstract protected function showName();//不能用private 修饰
//public function yy();这是错误的
public function yy(){
echo "抽象类也可以写非抽象方法";
}
//非抽象方法一定要写方法体

}
Person::yy();//无需实例化 直接这么调用。
class Jay extends Person{
public function showName(){
echo "<br>我的名字叫做周杰伦<br>";
}
}

class Jolin extends Person{
//如果不重写showName
//Class Jolin contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Person::showName)
public function showName(){
echo "<br>我的名字叫做蔡依林<br>";
}
}

//$person = new Person();
// Fatal error: Cannot instantiate abstract class Person in D:\wamp\www\php\oop\interface.php on line 33
//抽象类 不允许被实例化
$jay = new Jay();
$jay->showName();
$jolin = new Jolin();
$jolin->showName(); */
?>

PHP面向对象之抽象,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。