php中接口和抽象类的区别

来源:互联网 发布:sql 取前三大的值 编辑:程序博客网 时间:2024/06/05 06:41

抽象类和接口的概念不同。接口是对动作的抽象,抽象类是对根源的抽象
这里先说一下抽象方法和抽象类的概念:
抽象方法:没有方法实体的方法即为抽象方法,用abstract来修饰 abstract function fun1();
抽象类 :凡是包含抽象方法的类即为抽象类,抽象类也要用abstract来修饰。但抽象类中可以包含非抽象方法
再来看一下接口的概念:
接口:没有主体代码的方法定义组成的集合体。可以被其他类或接口实现。

—————————这里是分析本质的分割线————————
重点内容 (1)接口是一组规则的集合,它规定了实现本接口的类或接口必须遵守统一的规则。体验了自然界“”如果你是。。。则必须要。。。“”的理念
例如:人都能吃饭,即“如果你是人,则必须要吃饭”。那么模拟到程序中,就应该有一个Iperson接口,并有一个eat方法。然后我们规定,每一个表示“人”的类,必须实现该接口。
(2) 接口是一定粒度视图上同类事物的抽象表示。
例如:

抽象类和接口的定义很模糊,区分他俩,要从使用动机来分析。比如:有两个类,man和woman,里面都有eat方法,而且很明显eat方法对于两个子类来说都是必须要有而且没有任何不同的,所以我们可以把它设为借口,但是问题来了,既然是没有任何不同的,也就是说代码是不需要改动的,那既然这样,为什么不在定义“”接口“”的时候就写入方法实体让子类去更方便的使用呢?这样接口就“升级”成了抽象类。所以我认为,对于这些必要的、公用的方法,定义抽象类比较好。这是在使用动机上来说区分抽象类和接口的一个很重要的点。总而言之,接口和抽象类的主要区别在于使用的动机,而不在于起本身。接口和抽象类的另一个区别在于,抽象类和继承它的子类应该是一般和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。

总结几句来说:
1 接口只能做方法声明,抽象类除了可以做方法声明还能做方法实现
2 抽象类中的抽象方法必须全部被实现,否则该子类仍是抽象类。同理,接口类中的接口必须全部被实现,否则使用该接口的类是抽象类。
3 当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

1 0
原创粉丝点击