Java接口与抽象类比较

转载 2013年12月01日 21:56:59

thanks:http://baike.baidu.com/link?url=gH78QVOjmLmR5847sx0uS01odt96k9Vv8MPjxdmuysQB87ITG_5XfDHWz3G7Bvwt


Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。
不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。
在语法上,抽象类和接口有着以下不同:
1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是extends关键字,实现接口使用的是implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔。例:
public class Main extends JApplet
public class Main implements Runnable
public class Main extends JApplet implements ActionListener
public class Main extends JApplet implements ActionListener, Runnable
2.在abstract class中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
4.实现接口的类必须实现其中的所有方法继承自抽象类的子类实现所有的抽象方法抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值
7.接口中的方法默认都是 public,abstract 类型的

JAVA.抽象类与接口的几个特点与异同

抽象关键字:abstract 特点 1.抽象方法一定在抽象类中 2.抽象方法和抽象类都必须被abstract关键字修饰 3.抽象类不可以用new创建对象,因为调用抽象方法没意义,会编译出错 ...
  • qq_31515611
  • qq_31515611
  • 2016年03月28日 21:45
  • 3535

Java 抽象类、普通类、接口的区别——值得你一看的干货

【概念】 抽象类、具体类是相对的,并非绝对的。抽象是一种概念性名词,具体是一种可见可触摸的现实对象。概念越小,则其抽象程度就越大,其外延也越大,反之亦然。简单说,比如“人”比“男人”抽象...
  • csdn_aiyang
  • csdn_aiyang
  • 2017年05月04日 16:26
  • 2301

接口 interface 接口和抽象类的比较

接口里不能包含普通方法,借口里所有方法都是抽象方法。   [修饰符] interface 接口名 extends  父接口1,父接口2...{    零个到多个常量定义   零个到多个抽象方法定...
  • u010918487
  • u010918487
  • 2015年05月30日 09:52
  • 469

java 的接口可以实现接口吗?抽象类呢?

面试中可能会遇到这样的问题: 1.接口可以实现接口吗? ans:不可以. 2.抽象类可以实现接口吗? ans:可以...
  • jianjun4833
  • jianjun4833
  • 2017年05月15日 15:52
  • 2605

JAVA-抽象类和接口的区别总结

首先.抽象类和接口都很好的提供了一种将实现和接口分离的方法..  一、抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没...
  • oshirdey
  • oshirdey
  • 2014年07月26日 15:07
  • 1304

JAVA中接口和抽象类的区别?

原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实...
  • u010355144
  • u010355144
  • 2015年04月08日 18:04
  • 453

java提高篇(四)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。        抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两...
  • chenssy
  • chenssy
  • 2013年10月18日 21:04
  • 141170

小鸦-Java8抽象类与接口的区别

前序: 被不少考官问过, 这次想重新整理一下.我们以下面的表格作为参考 原地址: http://www.importnew.com/12399.html (侵删)首先, 我们必须明白, 抽象类是什么...
  • u014041227
  • u014041227
  • 2017年03月28日 00:59
  • 294

java中抽象类和接口的特点

java中抽象类的特点: 1. 如果一个类中有抽象方法,那么这个类一定是抽象类 2. 抽象类中不一定有抽象方法 3. 抽象类中可以存在抽象方法 4. 抽象类中可以存在构造方法 5. 抽象类中可以存在普...
  • u012586848
  • u012586848
  • 2016年08月02日 15:19
  • 2601

抽象类、接口的区别 和 抽象类可以不实现接口的全部方法

抽象类和接口的区别   抽象类里面可以有非抽象的方法,接口里只能有抽象方法。   抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号。    抽象类(abstract...
  • taoshengyijiuzt
  • taoshengyijiuzt
  • 2015年06月16日 20:58
  • 1630
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java接口与抽象类比较
举报原因:
原因补充:

(最多只允许输入30个字)