什么是多态?
第一句话:一段代码,一个函数,一个类的多态性
第二句话:一段代码,一个函数,一个类的灵活性
- 从生活中说:轿车,会开车的人都会开,人会开车,那么人可以开车,人猿会开车,那么人猿可以开车,如果说,轿车只能让人开,那是不是人猿就得创造一种猿车,专门供人猿开呢?这不是造成了资源的浪费吗?
- 从程序中说:一个类,只负责输出字符串,那么我要是给你传一个对象的参数呢?你怎么办,你怎么给我显示这个对象,再写一个专门输出对象的类?那你的代码要写多少行?别人理解你的代码得耗费多少时间?这难道不是金钱的损失吗?
- 多态这个东西,没有什么具体的语言能具体描述,他就是说一个东西的灵活性好不好,而且,面向对象(OOP)本身就是为了提高效率,一定程度上简化代码,达到复用的目的;
示例:
class Shoudiantong {
public function ons(Glass $g){
$g->display();
}
}
class Glass {
public function display(){}
}
class Hong extends Glass{
public function display(){
echo '红玻璃 <br/>';
}
}
class Blue extends Glass{
public function display(){
echo '蓝玻璃 <br/>';
}
}
class Tianpeng{
public function display(){
echo '天蓬元帅 <br/>';
}
}
$shoudiantong = new Shoudiantong();
$hong = new Hong();
$blue = new Blue();
$tianpeng = new Tianpeng();
$shoudiantong->ons($hong);
$shoudiantong->ons($blue);
注释
-
输出一句话,只有Glass类的子类才能被调用方法;
-
子类是父类,正如男人是人,女人是人,金鱼是鱼,鲨鱼是鱼,千里马也是马;
-
里氏代换:原能用父类的场合,都可以用子类来代替
-
PHP本身不进行参数类型检测,在PHP5.3以后,引入了对象类型的参数检测,仅仅是在参数为对象的时候,类型检测生效,普通的基本数据类型是不进行检测的;
-
多态在弱类型的语言中(例如JavaSscript PHP Python)的存在感不是那么强烈,但是在强类型的语言中(例如Java CPP C# C)显示的表现就很强烈
-
重在思想,不在语法;