ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java中抽象类和接口的区别

2021-12-29 16:05:46  阅读:130  来源: 互联网

标签:Java 火圈 接口 eat sleep 抽象类 public


在复习java的时候遇到了抽象类和接口,很好奇这两个有什么区别,于是去网上搜索了相关的例子,下面给出一个例子来说明这两者之间的区别。

狗都具有eat()和sleep()这两个方法,我们可以用abstract和interface来定义这个抽象概念

 1 //通过抽象类定义
 2   public abstract class Dog {
 3       public abstract void eat();
 4       public abstract void sleep();  
 5   }
 6   
 7   //通过接口定义
 8   public interface Dog {
 9       public abstract void eat();
10       public abstract void sleep();
11   }

我们现在想要狗拥有一个特殊的技术——钻火圈DrillFireCirecle(),如何增加这个行为呢?

假设有两个方法:

  • 将钻火圈方法与前面两个方法一同写入抽象类中,但是这样的话,但凡继承这个抽象类狗都具有了钻火圈技能,明显不合适
  • 将钻火圈方法与前面两个方法一同写入接口中,当需要使用钻火圈功能的时候,就必须实现 接口中的eat() 、sleep() 方法(重写该接口中所有的方法)显然也不合适
我们可以想一想,eat和sleep这两个方法每一条狗都有这个行为,但是钻火圈却并不是每一条狗都会的,只能说是狗的一种扩展功能,所以我们应该将这个特殊的行为,单独设计成一个接口,其中包含DrillFireCircle()方法,Dog设计为一个抽象类,其中有eat(),sleep()两个方法,因为每条狗都有这个行为

总结:

继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如狗是否能钻火圈,能则可以实现这个接口,不能就不实现这个接口。

原文地址:

https://www.zhihu.com/question/20149818

标签:Java,火圈,接口,eat,sleep,抽象类,public
来源: https://www.cnblogs.com/nanne1ess/p/15745285.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有