🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 概述 只能被继承,不能实例化对象的类 . ### 意义 因为,现实世界中,确实有很多的类比较抽象 .比如范围太大:实例化一个动物类!再比如概念太模糊:实例化一个怪物!但是,这些大的类别或者是模糊的类别往往又可以分成很多小的类别!而这些小的类别又有很多相似的动作|功能(方法),只是实现的方式不一样而已! ### 思想 在类中规定一些必须要完成的动作(功能|方法),但是我们不去完善方法体,这种只规定了方法名而没有完善方法体的方法叫作抽象方法!然后,该抽象类只能被继承,不能去实例化对象,因为抽象方法本来就是不完整的方法,需要下一级的类去实现(完善方法体)! 而继承它的类也只有两种选择: 要么完成父类(抽象类)中的抽象方法(完善方法体) 要么继续做抽象类! ### 语法 ~~~ 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.抽象类往往用于规定子类中必须要完成的方法或者成员,规定子类的方法结构,有时候为了保证完成一系列功能相似的多种操作类的结构一致,我们要求这些类都继承自一个相同的抽象类 .