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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹奎 中级黑马   /  2013-7-24 13:15  /  1568 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹奎 于 2013-7-25 11:11 编辑

学完接口和抽象类之后,发现他们貌似有重复概念,比如:不实现具体方法不能new对象,我想知道他们的根本的区别!sun公司为什么要设计一个接口概念呢?接口能做的事情抽象类全部都可以做?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

6 个回复

正序浏览
抽象类的成员可以具有访问级别,而接口的成员全部public级别
抽象类可以包含字段,而接口不可以,
抽象类可以继承接口,而接口不能继承抽象类
抽象类的成员可以具有具体实现,而接口不行
抽象的子类可以选择性实现其基类的抽象方法,而接口的子类必须实现

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
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 类型的。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
毕老师总结的
抽象类和接口异同:
相同:
1,都可以在内部定义抽象方法。
2,通常都在顶层。
3,都不可以实例化,都需要子类来实现。
不同:
1,抽象类中可以定义抽象方法和非抽象方法,
      而接口中只能定义抽象方法。
2,接口的出现可以多实现。
      抽象类只能单继承。
      也就是说:接口的出现避免了单继承的局限性。
3,继承和实现的关系不一致。继承:is a,实现:like a

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
1、接口可以被多重implements,抽象类只能被单一extends
2、接口只有定义,抽象类可以有定义和实现
3、抽象类可以写任意权限,但接口只能是公共的。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
他们的区别在于抽象类内部不一定都是抽象方法,而接口内部必定都是抽象方法。
抽象类即便是抽象了,但是还属于类,这就决定了他不能被多继承。
类之间不能进行多继承,是因为多继承容易代理安全隐患:当多个父类中定义了相同功能,但功能内容不同时,子类对象不确定要运行哪一个。
而java中有保留了这种机制,就是多实现,因为接口中的所有方法都是抽象的,没有方法主体,也就没有安全隐患。我想这就是sun弄出接口的意义吧

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先你得出别接口和抽象类并不是一个概念; 接口里面的方法全是抽象的而抽象类不一定,抽象类前面加的abstract 而接口是interface;接口还必须被子类实现;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马