PHP抽象类应用要点:
1.定义一些方法,子类必须完全实现这个抽象中所有的方法
2.不能从抽象类创建对象,它的意义在于被扩展
3.抽象类通常具有抽象方法,方法中没有大括号
PHP抽象类应用重点:
1.抽象方法不必实现具体的功能,由子类来完成
2.在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义
3.抽象类的方法可以有参数,也可以为空
4.如果抽象方法有参数,那么子类的实现也必须有相同的参数个数
//作用:抽象类不实现具体方法,具体方法由子类完成。 //定义抽象类 abstract abstract class A{ //abstract 定义抽象类的方法,这里没有花括号。子类必须实现这个抽象方法。 abstract public function say(); //抽象类可以有参数 abstract public function eat($argument); //在抽象类中可以定义普通的方法。 public function run(){ echo '这是run方法'; } } class B extends A{ //子类必须实现父类的抽象方法,否则是致命的错误。 public function say(){ echo '这是say方法,实现了抽象方法'; } public function eat($argument){ echo '抽象类可以有参数 ,输出参数:'.$argument; } } $b =new B; $b->say(); echo '<br>'; $b->eat('apple'); echo '<br>'; $b->run();
运行结果:
这是say方法,实现了抽象方法
抽象类可以有参数 ,输出参数:apple
这是run方法
注意:
如果 B 实现了抽象方法 say()、eat() ,那么 B 中 say()、eat() 方法的访问控制不能比 A 中 say()、eat() 的访问控制更严格,也就是说:
(1) 如果 A 中 say()、eat() 声明为 public ,那么 B 中 say()、eat() 的声明只能是 public ,不能是 protected 或 private
(2) 如果 A 中 say()、eat() 声明为 protected ,那么 B 中 say()、eat() 的声明可以是 public 或 protected ,但不能是 private
(3) 如果 A 中 say()、eat() 声明为 private ,嘿嘿,不能定义为 private 哦!( Fatalerror :Abstract function A::say()、eat() cannot be declaredprivate )