浅谈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

如有错误,欢迎批评指正。

原文地址:https://www.cnblogs.com/phdeblog/p/9108622.html

时间: 2025-01-14 09:21:16

浅谈java中接口与抽象类之间的异同的相关文章

【转】浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

Java中接口和抽象类的比较

Java中接口和抽象类的比较-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计使用多态性的基础[[1]].(在面向对象语言中,接口的多种不同的实现方式即为多态.多态性是允许你将父对象设置成为和一个或更多的他的子对象的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4编程技术内幕").简单的说,就是一句话:允许将子类类型的

浅谈Java中的对象和引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做"万物皆对象",这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: "按照通

浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈Java中的对象和对象引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: “按照通俗的说法,每个对象都是某个类(class)的一个实

浅谈Java中的深拷贝和浅拷贝

浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: [java] view plaincopyprint? int apples = 5; int pears = apples; int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float

Java中接口和抽象类的比較

Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计使用多态性的基础[[1]]. (在面向对象语言中,接口的多种不同的实现方式即为多态. 多态性是同意你将父对象设置成为和一个或很多其它的他的子对象的技术.赋值之后.父对象就能够依据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4编程技术内幕"). 简单的说.就是一句话:同意将

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用

浅谈Java中的Set、List、Map的区别(1)

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用