php--抽象类abstract 关键字
思考:在一个项目中,如果架构师在前面给定义了一些父类,而且希望所有的子类都遵循父类的设置,有没有什么办法可以限制呢?
引入:理论上讲没有系统性的办法,能够严格去规范程序员必须怎么实现,但是大家如果都遵循规则的话,那么可以利用父类来强制规范子类必须
完成要的的事情,这个时候需要用到抽象类。
抽象类 Abstract【掌握】
定义:抽象类使用abstract关键字修饰的类,表示该类只能被继承,不能被实例化
1.基本的雨打:使用abstract关键字修饰类,并且抽象类不能被实例化
<?php // 抽象类 abstract class posen{ } // 抽象类不能被实例化 $s=new posen(); //Cannot instrance 不能初始化这个类
2.抽象类只能子类继承
<?php // 抽象类 abstract class posen{ } // 抽象类不能被实例化 // $s=new posen(); //Cannot instrance 不能初始化这个类 // 子类继承 class man extends posen{ //无错误提示 代码正常运行 }
3.abctract 关键字还可以用来修饰方法(抽象方法),abstract修饰的方法不能有方法体,而且有抽象方法的类必须声明为抽象的类
<?php // 抽象类 abstract class posen{ // abstract public function add(){ } //报错 抽象方法不能有方法体{}; // 定义抽象方法没有方法体 abstract public function add(); // 普通方法有方法体 public function show(){ } } class man{ // abstract public function show(); //报错,abstract 方法 必须在抽象类中 }
4.抽象方法因为要被子类继承实现,所以不能使用private修饰(私有方法不会被继承)
<?php // 抽象类 abstract class posen{ // abstract public function add(){ } //报错 抽象方法不能有方法体{}; // 定义抽象方法没有方法体 abstract private function add(); // 普通方法有方法体 public function show(){ } } class man extends posen{ } $s=new man(); $s->add(); //致命错误 抽象方法不能使用private修饰
5.子类继承抽象类后,如果抽象类中有抽象方法,那么子类必须选择自己成为抽象类或这实现抽象方法(所有抽象方法)
<?php // 抽象类 abstract class posen{ abstract public function add(); } abstract class man extends posen{ //子类继承有抽象方法的类的时候,可以声明为抽象类,可以不用实现 } class wman extends man{ //子类继承抽象类的抽象方法后,要吗实现抽象方法,要吗自己称为抽象类 public function add(){ //实现父类posen中的抽象方法 报错解除 } }
总结:
1.使用abstract修饰的类叫做抽象类
2.抽象类不能被实例化,只能被继承
3.因为抽象类无法被实例化,以你私有成员在类中没有实质意义(还需要额外提供受保护或这公有方法来实现访问)
4.抽象类的目的是用来规范子类(通常比配抽象方法)
5.abstract还可以修饰方法,称为抽象方法,抽象方法所在的类必须为抽象类,抽象发放不能有方法体
6.有抽象方法的抽象被继承时子类要么自身是抽象类,要么实现所有抽象方法