zoukankan      html  css  js  c++  java
  • php抽象与接口的区别[转载]

    来自:http://www.cnblogs.com/k5054/archive/2012/12/26/2834205.html

    对于面向对象开发,抽象类与接口这两个东西是比较难理解的!

    今天看了一整天!自己总结一下吧!

    抽象类:是基于类来说,其本身就是类,只是一种特殊的类,不能直接实例,可以在类里定义方法,属性!类似于模版,规范后让子类实现详细功能!

    接口:主要基于方法的规范,有点像抽象类里的抽象方法,只是其相对于抽象方法来说,更加独立!可让某个类通过组合多个方法来形成新的类!

    抽象类与接口的相同点:

    1、都是用于声明某一种事物,规范名称、参数,形成模块,未有详细的实现细节!

    2、都是通过类来实现相关的细节工作

    3、语法上,抽象类的抽象方法与接口一样,不能有方法体,即{}符号

    4、都可以用继承,接口可以继承接口形成新的接口,抽象类可以继承抽象类从而形成新的抽象类

    抽象类与接口的不同点:

    1、抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量

    2、抽象类内未必有抽象方法,但接口内一定会有“抽象”方法

    3、语法上有不同

    1、抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类!

    2、抽象类的抽象方法一定要用abstract来声明,而接口则不需要

    3、抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法!而接口则是用implements让普通类在类里实现接口的详细方法,且接口可以一次性实现多个方法,用逗号分开各个接口就可

    各自的特点:

    抽象类内未必有抽象方法,但有抽象方法的类,则必是抽象类

    抽象类内,即便全是具体方法,也不能够实例化,只要新建类来继承后,实例继承类才可以

    接口可以让一个类一次性实现多个不同的方法

    接口本身就是抽象的,但注意不是抽象类,因为接口不是类,只是其方法是抽象的!所以,其也是抽象的

    应用与结合:

    以下的代码是基于自己的思考,未在实际开发中应用,只是这种写法有点奇特!让抽象与接口结合起来!

    <?php 
    /* 
    一、抽象类与接口的结合

    写此程序源于自己的猜测,想在抽象类里实现某一接口! 
    */ 
    interface work{ 
        public function say(); 
    }

    abstract class a implements work{ 
        public function showlove(){ 
            echo 'love you<br />'; 
        } 
    }

    class b extends a{ 
        public function say(){ 
            echo 'hello, i m in b'; 
        } 
    }

    $k=new b(); 
    $k->say();

    /* 
    以上程序能正常执行 
    普通类implements接口后,就变成了抽象类了,这就好像是直接给抽象类增加了一个抽象方法! 
    */

    二、接口与继承的结合

    父类是普通类,子类继承后,同时在了类里实现接口!

    疑问:这样的做法是否有意义,在实际开发中是否有这样的应用??

    */ 
    interface kk{ 
        public function say(); 
    }

    class a { 
        public function show(){ 
            echo '我是父类<br />'; 
        } 
    }

    class b extends a implements kk{ 
        public function say(){ 
            echo '我是继承A类,同时实现say接口的<br />'; 
        }

    }

    $b=new b(); 
    $b->show();//我是父类

    $b->say();//我是继承A类,同时实现say接口的

    ?>

  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/perseverancevictory/p/4246762.html
Copyright © 2011-2022 走看看