php中接口和抽象类的区别

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

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

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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值