浅谈java中接口与抽象类之间的异同
刚学习java的时候,总觉得接口和抽象类很像,但又说不上具体有什么区别。今天静下来,翻翻书,查查资料,做个小结。首先举两个例子,看看interface和abstract class 在“外形”上有啥异同。
1、先看一下抽象类:
abstract class Person{
private String name;
private Person(String n)
{
name=n;
}
public abstract String getDescription();
public String getName()
{
return name;
}
}
抽象类的主要特征有两个: 一、申明类的时候添加abstract关键字。二、有抽象方法。
抽象方法:只有申明,没有函数体。例如上面的例子,对人(Person)的描述不能一概而论,对于学生,对于老师,对于医生。。。。。。所以在这种情况下可以定义为抽象方法,抽象方法可以(必须)在继承它的子类中实现。抽象类中可以有域(属性),也可以有完整的方法,除了有抽象方法外,与普通类没什么区别。值得注意的是,由于抽象类不完整、具有不确定性,是不能实例化的,只能作为基类被继承。
2、再看一下接口
interface Usb{
int numbers=2;//自动定义类型为 static final
void toKeyboard();//自动定义为public 类型
void toMouse();//自动定义为public 类型
}
接口也可以定义为public类型,但是和类一样,必须保证所在文件的名字和接口名一直。如果不加public,那么该接口仅面向同包的类。虽然interface取代了class关键字,但我还是有一个疑问,接口是不是也是一种类?后来查阅发现:

接口和类同属于引用数据类型,是并列的。
3、总结抽象类和接口的区别
(1)抽象类和接口,都是抽象思想的体现,抽象类是对类的抽象,接口是对“可以实现的功能”的抽象,就是说通过接口,我可以实现某种功能,不是天生的,但是可以学。举个例子,例如在抽象电脑这个客观存在的事物时,可以把它设计成Computer类,我们还可以设计一个USB接口,让他接个鼠标和键盘,这样就具有了输入的功能。而电脑与生俱来的功能,例如显示屏显示信息,cpu计算结果,内部电路芯片等,可以封装在Computer类里面。
(2)接口相对于抽象类来说,更加抽象。这个从形式上就可以看出。接口中的的方法必须是抽象方法,但是抽象类的方法可以是完整(有方法体)的。
(3)抽象类说到底还是一个类啊,java中是不支持多继承的,虽然这么做确实降低了程序设计的复杂性,但只能继承一个类可能不一定能满足得了实际开发上的需求。那么接口(interface)在某种度上弥补了这种缺陷,因为它是可以被多个类实现(implements)的。
部分内容参考书籍:《thinking in java》、《java核心技术卷一》
参考博客:http://www.cnblogs.com/dolphin0520/p/3811437.html
如有错误,欢迎批评指正。
浅谈java中接口与抽象类之间的异同的更多相关文章
- 浅谈Java中接口与抽象类的异同
浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 浅谈Java中的深拷贝和浅拷贝(转载)
浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...
- 浅谈Java中的深拷贝和浅拷贝
转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...
- 浅谈Java中set.map.List的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- 【转】浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 浅谈Java中的对象和对象引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
随机推荐
- C# 委托系列(一)将方法作为方法的参数
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每 ...
- 在spring添加注解时,第一行package报错configure build path
练习spring的ioc的注解的时候写上注解就会在第一行package报错configure build path. 用的spring4.2.4的jar包.经过上网查阅资料,可能是jar包冲突,解决办 ...
- zipfile 解压文件名乱码
zipfile 中文文件名 解压乱码 上传文件功能模块需求及BUG现象: 环境 mac django 1.11.13 python 3.6 功能需求: 上传一个.zip格式的压缩文件 解压该test. ...
- Oracle数据库新装之后出现的监听程序无法正常启动和运行(Oracle-12514)
修改安装目录下的配置文件 比如:F:\app\admin-PC\product\11.2.0\dbhome_1\network\admin\ 修改这个目录下的listener.ora和tns ...
- LeetCodee 105. Construct Binary Tree from Preorder and Inorder Traversal
问题重述: 问题求解: 我们换一组比较有代表性的样例, 对于上图的树来说, index: 0 1 2 3 4 5 6 先序遍历为: 中序遍历为: 5同理,右子树也是如此.这样不难看出本题应该用递归方法 ...
- redhat5本地源NBD驱动安装
1.将镜像挂载到本机上 1)将系统ISO镜像放到自己电脑/root下 lsb_release -a 查看系统类型 2)在(/)目录下,建立yum目录 mkdir /root/yum 3 ...
- HDU1398 Square Coins(生成函数)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- 使用js实现单向绑定
详细解释单向绑定 参考资料 MDN addEventListener()定义与用法 <!DOCTYPE html> <html lang="en"> < ...
- 如何解决php无法存储session中的问题?
场景:前几天在一个技术群里面,看到一个小伙伴提出了一个问题------在thinkphp框架中,使用用户登录将用户信息存储在session,始终是无法存储的. 解决思路:先查看了代码逻辑(确证无误)- ...
- php连接数据库(一)
1.php链接数据库: 1.链接数据库 2.判断是否连接成功 3.设置字符集 4.选择数据库 5.准备SQL语句 6.发送SQL语句 7.处理结果集 8.释放资源(关闭数据库) $result = m ...