A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 奋斗2013 中级黑马   /  2013-2-28 23:04  /  2553 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java接口理解不深刻,请高手详细解释一下。接口和抽象类的区别与联系

9 个回复

倒序浏览
一:接口是公开的,里面不能有私有的方法或变量,是让别人使用的;
而抽象类是可以有私有方法或私有变量的,

二:实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,
在一般的应用中,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

三:接口可以实现多重继承,而一个类只能继承一个父类,但可以通过继承多个接口实现多重继承。
回复 使用道具 举报
有个老爹好办事
父类:  亲生父亲,只能有一个,他的都会给你的。   (继承)
接口:  干爹,可以认很多个,他不会给你东西,你还要帮他做事,但只要你完成了他给你的事,你可以顶着他们的名号做很多事。(实现、多实现)
抽象类:还是属于类,这个父亲有些有些东西需要你配合完成,询问你的意见才能确定。(当然也可以不问你——没有抽象方法的抽象类)。
回复 使用道具 举报
1、抽象类里面可以有非抽象方法但接口里只能有抽象方法 声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
2、接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。
区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。
区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。
区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
联系: 接口和抽象类都是对象间泛化到顶端的顶层类,接口是泛化到顶层,而抽象类是中间类,是半抽象物,当然,当程序员在找多个对象的公共属性和方法时,这些处于交集的公共属性和方法在泛化到顶层时都需要采用接口来定义,如果存在中间态便可采用抽象类,否则 无需采用
回复 使用道具 举报
接口:成员变量--必须是常量(public static final修饰)
       成员方法--必须是抽象方法
     构造方法--没有,因为接口不能被实例化
抽象类: 成员变量--可以为常量,也可以为变量
       成员方法--可以为抽象方法,也可以为普通方法
       构造函数--可以有构造函数,让子类去调用
明白吗?
回复 使用道具 举报
小结

  1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

  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中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 接口的两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
接口简述
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口。
Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。如 x=new comparable(......);//这个是错误来的。但是可以声明接口变量Comparable x; //这是允许的。
[1] Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public,静态的和final属性。
接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。
回复 使用道具 举报
李志卫 发表于 2013-3-1 01:41
有个老爹好办事
父类:  亲生父亲,只能有一个,他的都会给你的。   (继承)
接口:  干爹,可以认很多个 ...

操......贴切,透彻理解实现接口和继承抽象类的精髓
回复 使用道具 举报
JAVA接口:
(1):接口就是某个事物对外提供的一些功能的申明

(2):可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点

(3):使用interface关键字定义接口

(4):一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现

创建接口的步骤:用关键字 implements 实现接口

接口特性:
(1)接口不可以被实例化
(2)实现类必须实现接口的所有方法
(3)实现类可以实现多个接口
(4)接口中的变量都是静态常量
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马