抽象类与接口

抽象类的实际意义: 抽象类是类的模板。当你发现很多类的某些方法在不断重复写,这时可以考虑使用抽象类。
抽象类的特点:
  1. 类前加 abstract 是抽象类(如:abstract class lijian)。
  2. 方法名前加 abstract 是抽象方法(如:abstract public function show(){} )。
  3. 抽象类不能被实例化,只可以被继承,它的意义在于被扩展。
  4. 当一个类继承自一个抽象类时,此类继承过来的抽象方法必须一一实现。否则同样无法实例化。
  5. 抽象类中不光可以抽象方法,也可以有普通方法。
  6. 抽象类的方法可以有参数,也可以为空, 如果抽象方法有参数,那么子类的实现也必须有相同的参数个数  。
  7. 方法的权限必须是public

 

接口的实际意义: 当多人协作开发,需要调用别人的类,我如何知道某个功能的实现方法是怎么命名呢?这时候用接口就很方便了。因为类继承接口时,接口的方法必须一一实现。
接口的特点:
  1. 接口的方法必是抽象方法,所以不能用方法体
  2. 一个类可以继承多个接口 class lijian implements one,two,three
  3. 接口可以被继承,用extends
  4. 接口方法的权限必须是public
  5. 接口不能有属性,可以用常量

 

抽象类和接口的区别

接口是一个特殊的抽象类,也可以看作是一个模型的规范。接口与抽象类大致区别如下:
  1. 一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果继承一个抽象类,只需要实现需要的方法即可
  2. 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已
  3. 抽象类只能单继承,当一个子类需要实现的功能需要继承多个父类时,就必须使用接口

 

代码示例

 

<?php  
    //抽象类  
    abstract class Flyidea
    {   
         //抽象方法
         abstract public function engine();
        
         //普通方法
         public function echo123(){
            echo 123;
         }
    }  
  
    //继承抽象类
    class lijian extends Flyidea
    {  
        //将继承的抽象方法实现。
        public function engine(){
            echo '实现了';
        }
    }    
?>

 

 

 

<?php
    
     //接口
     interface love
     {
         public function a();
     }
    
      interface test extends love
      {
         public function b();
      }

     //继承接口
     class lijian implements test
     {
        public function a(){}
        public function b(){}
     }
    
?>

 

posted @ 2014-03-09 20:10  tlijian1989  阅读(218)  评论(0编辑  收藏  举报