php中抽象类和接口的概念和区别

抽象类(abstract)优于接口(interface)的地方:

1. 一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可,这是抽象类的一个优点

2. 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类显然将无法通过编译,因为它们所实现的方法名已经不存在了,这是接口的一个缺点;而抽象类就不存在这个问题,只是为子类添加了一个新的方法(接口中旧的方法)

3. B继承A,C也继承A,假设类B、C中继承的fun1这个方法实现代码是一样的,则可以在A中写好代码,BC只要调用父类A的方法既可,不用重新编写代码;而其他BC方法名相同、具体实现不相同的代码,则在A写成抽象的方法。


接口(interface) 优于 抽象类(abstract) 的地方:

接口,一个子类可以implements多个接口,实现不同的功能;

抽象类,一个子类只能有一个父类;A extends B . 这样A就拥有了B的所有方法和功能,但当A还想拥有C的功能的时候。就不能通过 A extends C 来实现, 而需要走一些弯路。目前系统架构的趋势就是由针对抽象(接口,抽象类)而不是具体编程,并且将功能尽可能的细分。 这就需要通过实现多个接口的方式来实现,显然,抽象类无法提供这样的功能。从系统重构的角度来说,一个具体类抽象出接口是十分方便的。只需要写一个接口,里面定义具体类的所有方法,然后在为这个具体类implement这个接口就可以了。而抽象类就要复杂的多,比如说 B extends A , C extends B 如果想要为c抽象出一个抽象类D的话,就需要找到它的最顶层A来从头做起,因为无法做到C extends D ,继承抽象类的时候不需要实现全部方法,但此子类还是abstract的,无法实例化

 

 

posted on 2012-09-09 16:08  mingaixin  阅读(281)  评论(0)    收藏  举报