俺觉得类的继承主要表达的是一种关系,接口主要体现的是具有某种功能或能力楼主可以看看《head first设计模式》的前面几页,将类和接口,很精辟,也很有趣

解决方案 »

  1.   

    谢谢朋友的回答,基本的意思理解了很多
    那我这样理解你看可以吗?
    接口定义的是最底层的方法(也可以理解成对要做什么的声明),至于方法本身的内容及用于什么,那是实现类管理的。不过我还有一个地方不明白,interface ChangeAddSalary中的addSalary方法,如果说在这里声名是为了以后便于更改,那实现类MannageAddSalary和EmployeeAddSalary中不是也有具体的addSalary方法吗。如果我上面理解的定义是对的。请问在这个例子中,interface ChangeAddSalary中的addSalary方法作为底层方法,如果要做改动,又该如何,其实我这里还是想问,为什么要设置这个ChangeAddSalary中的addSalary方法,毕竟MannageAddSalary和EmployeeAddSalary是各自拥有的addSalary方法,基本是作为底层方法声明一下,又有什么意义,读了一篇文章,里面这样设计便于修改,可是便于修改吗,如果我要改动我要做的行为,应该是改动MannageAddSalary和EmployeeAddSalary中的addSalary方法吧,毕竟interface ChangeAddSalary中的addSalary方法只是个声明。我也想不出连一个实际运作都没有的空方法有什么可以修改的,如果是名字
    问了一个朋友,他说接口中定义的方法名称一般都是固定的不会改动,要改动接口中定义的方法就要改所有实现该接口的类。
    这样对吗。
    问题一大串,麻烦了
      

  2.   

    1.接口不是底层的类。而是要展现给使用者的衔接的出入口。
     在Zend引擎中,很少看到使用接口的地方(毕竟PHP5还不算是纯正的OOP)。
     在Java中,使用接口的例子非常多。例如加密处理,程序员在调用加密算法的接口,并不需要考虑使用的是什么类库,只要看文档,调用相应的接口就可以。有时由于版权的原因,可能无法使用JDK自带的类库,但无论是用什么类库,只要他遵循JDK提供的接口,调用加密处理的代码在不需要任何改动的情况下,可以更换任何类库。
     语言不同,但是思考方式都是相同的。2.MannageAddSalary和EmployeeAddSalary是各自拥有的addSalary,
    为什么ChangeAddSalary中的addSalary接口?ChangeAddSalary中的addSalary接口是否有意义,关键看如何使用MannageAddSalary和EmployeeAddSalary的目标实现。
    如果在使用的时候,我就要一个ChangeAddSalary,但是具体到哪个***AddSalary我不需要考虑的时候,
    定义接口的优势就显现出来了——这也是接口功能的初衷。lz的例子中,ChangeAddSalary这个名字不好,如果是Salary,是不是在调用的时候更容易理解?
      

  3.   

    朋友说的意思我倒是明白,但是ChangeAddSalary所定义的是空方法,也实现不了什么操作,我实在想不出什么情况下会只使用ChangeAddSalary(这样只有空方法的情况)谢谢了
      

  4.   

    接口的出现是为了在单一继承的语言中(如PHP,C#)中可以仿真多重继承。在实现时,多以虚拟类实现。所以,虚拟类只是接口实现的方法而已。接口,定义了一个类应该有的表现:what,而不关心应该如何做:how。
      

  5.   


    很多概念太抽象,要理解需要时日,lz慢慢来。一定要用到抽象类的情况,前面已经说过,DAO设计模式是其一。
    不使用接口的DAO,局限性非常大。