7.8.2 PHP抽象方法和抽象类2
在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口。而抽象方法就是为了方便继承而引入的。
当类中有一个方法,他没有方法体,也就是没有花括号,直接分号结束,象这种方法我们叫抽象方法,必须使用关键字abstract定义。
如: public abstract function fun();
包含这种方法的类必须是抽象类也要使用关键字abstract加以声明。(即使用关键字abstract 修饰的类为抽象类)
抽象类的特点:
不能实例化,也就new成对象
若想使用抽象类,就必须定义一个类去继承这个抽象类,并定义覆盖父类的抽象方法(实现抽象方法)。
其实抽象类对于子类(实现类),有一个约束的作用,
含有抽象方法的类肯定是抽象类,但是不是所有的抽象类都必须包含抽象方法。
test.php
<?php
/*
* 1. 什么是抽象方法 ?
* 定义: 一个方法如果没有方法体(一个方法,不使用"{}", 直接使用分号结束的方法,才是没有方法体的方法 ),则这个方法就是抽象方法
*
* 一、 声明一个方法,不使用{},而直接分号结束
* 二、如果是抽象方法,必须使用 abstract(抽象关键字来修饰)
*
* 2. 什么是抽象类 ?
* 一、 如果一个类中有一个方法是抽象的方法, 则这个类就是抽象类
* 二、如果声明一个抽象类, 则这个类必须要使用 abstract关键字来修饰
*
*
* 注意:
*
* 1. 只要使用 abstract修饰的类, 就是抽象类
* 2. 抽象类是一种特殊的类, 特殊在哪里(在抽象类中可以有抽象方法)
* 3. 除了在抽象类中可以有抽象方法,以外,和正常的类完全一样
*
* 注意2:
* 1. 抽象类不能实例化对象(不能创建出对象)
* 2. 如果看见抽象类, 就必须写这个类的子类, 将抽象类中的抽象方法覆盖(加上方法体)
* 3. 子类必须全部实现(覆盖重写)抽象方法, 这个子类才能创建对象, 如果只实现部分, 那么还有抽象方法,则类也就必须是抽象类
*
* 抽象方法作用:
* 抽象方法的作用就是规定了,子类必须有这个方法的实现, 功能交给子类
*
* 只写出来结构, 而没有实现, 实现交给具体的子类(按自己的功能)去实现
*
* 抽象类的作用:
*
* 就是要求子类的结构, 所以抽象类就是一个规范
*
*/
abstract class Person {
public $name;
public $age;
//特殊的方法抽象方法的存在
abstract function say();
abstract function eat();
function run() {
echo "11111111111111<br>";
}
function sleep() {
echo "2222222222222222<br>";
}
}
class StudentCn extends Person {
function say() {
echo "我是中国人,我说中文<br>";
}
function eat() {
echo "我是中国人,我用筷子吃饭";
}
}
class StudentEn extends Person {
function say() {
echo "I am English ,i say english<br>";
}
function eat() {
echo "我是外国人, 我用刀子和叉子吃饭";
}
}
$s1 = new StudentEn();
$s1 -> say();
$s1 -> eat();