### 概述
只能被继承,不能实例化对象的类 .
### 意义
因为,现实世界中,确实有很多的类比较抽象 .比如范围太大:实例化一个动物类!再比如概念太模糊:实例化一个怪物!但是,这些大的类别或者是模糊的类别往往又可以分成很多小的类别!而这些小的类别又有很多相似的动作|功能(方法),只是实现的方式不一样而已!
### 思想
在类中规定一些必须要完成的动作(功能|方法),但是我们不去完善方法体,这种只规定了方法名而没有完善方法体的方法叫作抽象方法!然后,该抽象类只能被继承,不能去实例化对象,因为抽象方法本来就是不完整的方法,需要下一级的类去实现(完善方法体)!
而继承它的类也只有两种选择:
要么完成父类(抽象类)中的抽象方法(完善方法体)
要么继续做抽象类!
### 语法
~~~
abstract class Person{ //抽象类
abstract public function say(); //访问修饰符只能为public 或 protected , private是无意义的,也会报错
}
class Student extends Person{
public function say() //实现类必须完成抽象方法或者继续做抽象类
{
echo "Hello";
}
}
abstract class Person extends Animal{ //继续做抽象类
}
~~~
### 注意
1. 如果一个类继承自一个抽象类,而其自身不是一个抽象类,则必须实现父类中的所有的抽象方法 .
2. 抽象类中,不但可以包括抽象方法,还可以包括其他任意的普通成员(属性、常量、非抽象方法),都可以被子类所继承 .
3. 通俗的讲,抽象类给其子类留下的不但有“遗产”,还有“遗嘱”.
4. 抽象类中可以没有抽象方法,但是有抽象方法的类,一定得定义为抽象类 .
### 作用
1.可以完成普通类的继承,为其他的类提供公共的代码 .
2.抽象类往往用于规定子类中必须要完成的方法或者成员,规定子类的方法结构,有时候为了保证完成一系列功能相似的多种操作类的结构一致,我们要求这些类都继承自一个相同的抽象类 .
- PHP加密技术
- md5加密
- Crypt加密
- 函数
- 概述
- 强类型参数
- 可变参数列表
- 值传递&引用传递
- 变量作用域
- 可变函数
- 嵌套函数
- 递归函数
- 匿名函数(闭包)
- 面向对象
- 概念
- 类
- 对象的传值
- 对象的克隆
- 构造方法
- 析构方法
- 克隆方法
- $this
- 类常量
- 静态属性
- 静态方法
- 继承
- 重写
- 重载
- 概述
- 属性重载
- 概述
- __set()
- __get()
- __unset()
- __isset()
- 方法重载
- 概述
- __call()
- __callstatic()
- 封装
- 最终类
- 抽象类
- 接口
- 对象的序列化与反序列化
- __sleep()
- __wakeup()
- 其他魔术方法
- 对象的遍历
- 类和对象相关函数
- 错误
- 概述
- 设置错误级别
- trigger_error()触发错误
- 处理PHP中的错误
- 异常
- 概述
- 自定义异常类
- 自定义文件写入异常类
- 记录和发送异常信息
- 使用观察者模式处理异常信息
- 自定义异常处理器
- 设计模式
- 创建型
- 单例模式
- 工厂模式
- 原型模式
- 结构型
- 注册树模式
- 适配器模式
- 数据映射模式
- 装饰器模式
- 代理模式
- 行为型
- 策略模式
- 观察者模式
- 迭代器模式
- 网络
- cURL
- Oauth2.0
- QQ第三方登录
- TCP/IP协议
- 概述
- HTTP协议
- 概述
- HTTP请求协议
- HTTP响应协议
- WebSocket
- 安装扩展
- Redis
- Socket
- 计算机通信
- socket简介
- PHP操作socket
- TCP
- HTTP服务端
- WebSocket
- PHP7
- 生成器yield
- 异常finally
- CGI和FPM
- php有用命令
- 内存