关于使用接口和抽象类的问题,谢谢 俺觉得类的继承主要表达的是一种关系,接口主要体现的是具有某种功能或能力楼主可以看看《head first设计模式》的前面几页,将类和接口,很精辟,也很有趣 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢朋友的回答,基本的意思理解了很多那我这样理解你看可以吗?接口定义的是最底层的方法(也可以理解成对要做什么的声明),至于方法本身的内容及用于什么,那是实现类管理的。不过我还有一个地方不明白,interface ChangeAddSalary中的addSalary方法,如果说在这里声名是为了以后便于更改,那实现类MannageAddSalary和EmployeeAddSalary中不是也有具体的addSalary方法吗。如果我上面理解的定义是对的。请问在这个例子中,interface ChangeAddSalary中的addSalary方法作为底层方法,如果要做改动,又该如何,其实我这里还是想问,为什么要设置这个ChangeAddSalary中的addSalary方法,毕竟MannageAddSalary和EmployeeAddSalary是各自拥有的addSalary方法,基本是作为底层方法声明一下,又有什么意义,读了一篇文章,里面这样设计便于修改,可是便于修改吗,如果我要改动我要做的行为,应该是改动MannageAddSalary和EmployeeAddSalary中的addSalary方法吧,毕竟interface ChangeAddSalary中的addSalary方法只是个声明。我也想不出连一个实际运作都没有的空方法有什么可以修改的,如果是名字问了一个朋友,他说接口中定义的方法名称一般都是固定的不会改动,要改动接口中定义的方法就要改所有实现该接口的类。这样对吗。问题一大串,麻烦了 1.接口不是底层的类。而是要展现给使用者的衔接的出入口。 在Zend引擎中,很少看到使用接口的地方(毕竟PHP5还不算是纯正的OOP)。 在Java中,使用接口的例子非常多。例如加密处理,程序员在调用加密算法的接口,并不需要考虑使用的是什么类库,只要看文档,调用相应的接口就可以。有时由于版权的原因,可能无法使用JDK自带的类库,但无论是用什么类库,只要他遵循JDK提供的接口,调用加密处理的代码在不需要任何改动的情况下,可以更换任何类库。 语言不同,但是思考方式都是相同的。2.MannageAddSalary和EmployeeAddSalary是各自拥有的addSalary,为什么ChangeAddSalary中的addSalary接口?ChangeAddSalary中的addSalary接口是否有意义,关键看如何使用MannageAddSalary和EmployeeAddSalary的目标实现。如果在使用的时候,我就要一个ChangeAddSalary,但是具体到哪个***AddSalary我不需要考虑的时候,定义接口的优势就显现出来了——这也是接口功能的初衷。lz的例子中,ChangeAddSalary这个名字不好,如果是Salary,是不是在调用的时候更容易理解? 朋友说的意思我倒是明白,但是ChangeAddSalary所定义的是空方法,也实现不了什么操作,我实在想不出什么情况下会只使用ChangeAddSalary(这样只有空方法的情况)谢谢了 接口的出现是为了在单一继承的语言中(如PHP,C#)中可以仿真多重继承。在实现时,多以虚拟类实现。所以,虚拟类只是接口实现的方法而已。接口,定义了一个类应该有的表现:what,而不关心应该如何做:how。 很多概念太抽象,要理解需要时日,lz慢慢来。一定要用到抽象类的情况,前面已经说过,DAO设计模式是其一。不使用接口的DAO,局限性非常大。 一个PHP foreach循环的问题 关于基于web的文件管理系统 $FILE导致的上传问题。 php中 == 和 === 有什么区别? Fatal error: Call to undefined function date_format() javascript获取php页面数组的问题。 无权限访问,PHP空间数据库密码 怎么计算数组中的元素个数!急!! 又来麻烦大家了:),怎样分割这个字符串:12.23南方潮雨 PHP错误请教 PHP截取中文字符串中的中文 关于循环分组的问题
那我这样理解你看可以吗?
接口定义的是最底层的方法(也可以理解成对要做什么的声明),至于方法本身的内容及用于什么,那是实现类管理的。不过我还有一个地方不明白,interface ChangeAddSalary中的addSalary方法,如果说在这里声名是为了以后便于更改,那实现类MannageAddSalary和EmployeeAddSalary中不是也有具体的addSalary方法吗。如果我上面理解的定义是对的。请问在这个例子中,interface ChangeAddSalary中的addSalary方法作为底层方法,如果要做改动,又该如何,其实我这里还是想问,为什么要设置这个ChangeAddSalary中的addSalary方法,毕竟MannageAddSalary和EmployeeAddSalary是各自拥有的addSalary方法,基本是作为底层方法声明一下,又有什么意义,读了一篇文章,里面这样设计便于修改,可是便于修改吗,如果我要改动我要做的行为,应该是改动MannageAddSalary和EmployeeAddSalary中的addSalary方法吧,毕竟interface ChangeAddSalary中的addSalary方法只是个声明。我也想不出连一个实际运作都没有的空方法有什么可以修改的,如果是名字
问了一个朋友,他说接口中定义的方法名称一般都是固定的不会改动,要改动接口中定义的方法就要改所有实现该接口的类。
这样对吗。
问题一大串,麻烦了
在Zend引擎中,很少看到使用接口的地方(毕竟PHP5还不算是纯正的OOP)。
在Java中,使用接口的例子非常多。例如加密处理,程序员在调用加密算法的接口,并不需要考虑使用的是什么类库,只要看文档,调用相应的接口就可以。有时由于版权的原因,可能无法使用JDK自带的类库,但无论是用什么类库,只要他遵循JDK提供的接口,调用加密处理的代码在不需要任何改动的情况下,可以更换任何类库。
语言不同,但是思考方式都是相同的。2.MannageAddSalary和EmployeeAddSalary是各自拥有的addSalary,
为什么ChangeAddSalary中的addSalary接口?ChangeAddSalary中的addSalary接口是否有意义,关键看如何使用MannageAddSalary和EmployeeAddSalary的目标实现。
如果在使用的时候,我就要一个ChangeAddSalary,但是具体到哪个***AddSalary我不需要考虑的时候,
定义接口的优势就显现出来了——这也是接口功能的初衷。lz的例子中,ChangeAddSalary这个名字不好,如果是Salary,是不是在调用的时候更容易理解?
很多概念太抽象,要理解需要时日,lz慢慢来。一定要用到抽象类的情况,前面已经说过,DAO设计模式是其一。
不使用接口的DAO,局限性非常大。