|
抽象类
<?php
//声明一个抽象类,要使用abstract关键字标识
abstract class Person {
protected $name; //声明一个存储人的名字的成员
protected $country; //声明一个存储人的国家的成员
function __construct($name="", $country="china") {
$this->name = $name;
$this->country = $country;
}
//在抽象类中声明一个没有方法体的抽象方法,使用abstract关键字标识
abstract function say();
//在抽象类中声明另一个没有方法体的抽象方法,使用abstract关键字标识
abstract function eat();
//在抽象类中可以声明正常的非抽象的方法
function run(){
echo "使用两条腿走路<br>"; //有方法体,输出一条语句
}
}
//声明一个类去继承抽象类Person
class ChineseMan extends Person {
//将父类中的抽象方法覆盖,按自己的需求去实现
function say() {
echo $this->name."是".$this->country."人,讲汉语<br>"; //实现的内容
}
//将父类中的抽象方法覆盖,按自己的需求去实现
function eat() {
echo $this->name."使用筷子吃饭<br>"; //实现的内容
}
}
//声明另一个类去继承抽象类Person
class Americans extends Person {
//将父类中的抽象方法覆盖,按自己的需求去实现
function say() {
echo $this->name."是".$this->country."人,讲英语<br>"; //实现的内容
}
//将父类中的抽象方法覆盖,按自己的需求去实现
function eat() {
echo $this->name."使用刀子和叉子吃饭<br>"; //实现的内容
}
}
$chineseMan = new ChineseMan("高洛峰", "中国"); //将第一个Person的子类实例化对象
$americans = new Americans("alex", "美国"); //将第二个Person的子类实例化对象
$chineseMan -> say(); //通过第一个对象调用子类中已经实例父类中抽象方法的say()方法
$chineseMan -> eat(); //通过第一个对象调用子类中已经实例父类中抽象方法的eat()方法
$americans -> say(); //通过第二个对象调用子类中已经实例父类中抽象方法的say()方法
$americans -> eat(); //通过第二个对象调用子类中已经实例父类中抽象方法的eat()方法 |
|