抽象类和接口在什么情况下适用?

共 2055字,需浏览 5分钟

 ·

2021-01-14 14:26

点击上方“程序IT圈”,选择“设为星标

我们一起学编程!


 


前言


上篇文章《抽象类不能实例化》中,我在文章最后顺嘴提了一下接口,就是当时讲抽象类的时候说接口也是抽象类,是个特殊的抽象类。

结果怎么着,那个学弟又问我了:“学长,抽象类和接口有什么区别呢?”

来,干!


问题:

到底什么时候该用抽象类,什么时候该用接口呢?

如何区分使用抽象类和接口


大家在比较抽象类和接口的区别时,一定要强调抽象类描述的是事物的本质,而接口描述的是事物的功能。


比如:保温杯是水杯,所以水杯应该设计为抽象类,保温杯有保温的功能,所以保温应该设计为接口。

可理解为:

class 保温杯 extends 水杯 implements 保温

用实例说话

  1. package zmldemo;

  2. //水杯抽象类

  3. public abstract class Cup {

  4. String name;//水杯名称

  5. String color;//水杯颜色


  6. public Cup() {

  7. }


  8. public Cup(String name, String color) {

  9. this.name = name;

  10. this.color = color;

  11. }

  12. //水杯使用说明方法

  13. public abstract void useCup();

  14. }


  1. package zmldemo;

  2. //保温接口

  3. public interface BaoWen {

  4. //保温方法

  5. public void baoWen();

  6. }


  1. package zmldemo;

  2. //刷牙杯

  3. public class ShuaYaBei extends Cup {

  4. public ShuaYaBei() {

  5. }


  6. public ShuaYaBei(String name, String color) {

  7. super(name, color);

  8. }


  9. @Override

  10. public void useCup() {

  11. System.out.println("我是"+this.color+"的"+this.name+","+"我是用来刷牙的");

  12. }

  13. }


  1. package zmldemo;

  2. //保温杯

  3. public class BaoWenBei extends Cup implements BaoWen{


  4. public BaoWenBei(){


  5. }

  6. public BaoWenBei(String name,String color){

  7. super(name,color);

  8. }



  9. @Override

  10. public void useCup() {

  11. System.out.println("我是"+this.color+"的"+this.name+","+"我是用来喝水的");

  12. }


  13. @Override

  14. public void baoWen() {

  15. System.out.println("我能对水杯里的水进行保温");

  16. }

  17. }


  1. package zmldemo;


  2. public class CupTest {

  3. public static void main(String[] args) {

  4. ShuaYaBei shuaYaBei = new ShuaYaBei("刷牙杯","红色");

  5. shuaYaBei.useCup();


  6. BaoWenBei baoWenBei = new BaoWenBei("保温杯","金黄色");

  7. baoWenBei.useCup();

  8. baoWenBei.baoWen();



  9. }

  10. }

运行结果:

我想看完这个例子,抽象类和接口大家应该能理解了。


—————END—————


推荐阅读:



最近面试BAT,整理一份面试资料Java面试BAT通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡
浏览 9
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报