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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 盖保宁 黑马帝   /  2011-9-26 14:32  /  2735 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个类只要有一个抽象方法,就要用abstract定义该类,即抽象类。
而interface修饰的类,里面的方法都是抽象方法。
那么接口和抽象类的使用范围有什么不同?
为什么java既要有抽象类又要有接口呢

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

13 个回复

倒序浏览
黑马网友  发表于 2011-9-26 14:47:18
沙发
抽象类中有抽象方法,需要继承它的类去重写。
接口中的所有方法必须是抽象方法,由实现它的类重写。
java是单继承,多实现的机制,如果你已经继承了一个类,还需要继承其他类,不妨去实现接口来的灵活

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 15:03:42
藤椅
感觉接口没有继承一个类灵活啊,继承多个接口与C++的多继承有什么区别么,为什么要这么用呢
回复 使用道具 举报
黑马网友  发表于 2011-9-26 15:19:58
板凳
先说一下他们在设计思想上的区别:在java中,抽象类和具体实现类之间是一种继承关系,也就是说如果采用抽象类的方式,则父类和子类在概念上应该是相同的,但接口却不一样,如果采用接口的方式,则父类和子类在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为。如果我们只关注一个事物有什么功能,而不去关注它是具体怎么实现的,就可以采用接口,分层开发中,用的最多就是面向接口开发,如果某个事物的功能具有延续性,子类有自己特有的一些功能属性,就可以采用抽象类设计。仅供参考啊。。。。。

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 回答的不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 15:52:16
报纸
最主要的区别就是,单继承,多接口。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 不无道理!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 15:59:56
地板
接口我们用得比较多了,我想你是想问抽象类用在什么地方,
java就业大全里有详细的介绍:
模板方法设计模式是抽象类的一个典型应用

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 19:28:59
7#
我补充一点吧
抽象类可以有自己的 构造方法
而接口 不能有。
但是抽象类不能实例化。
回复 使用道具 举报
黑马网友  发表于 2011-9-26 23:02:40
8#

回复 楼主 的帖子

abstract类既可以有abstract方法,也可以有非abstract方法,但是接口不能有非abstract方法。
java使用接口是为了克服单继承性的缺点,一个类可以实现多个接口。
如果某个问题需要使用继承才能更好地解决,比如,子类除了需要实现父类的abstract方法,还需要从父类继承一些变量或者继承一些重要的非abstract方法,就可以考虑使用abstract类;如果某个问题不需要继承,只是需要若干个类给出某些重要的abstract方法的实现细节,就可以考虑使用接口。
这就是为什么java中既要有abstract类又要有接口。
回复 使用道具 举报
黑马网友  发表于 2011-9-27 07:27:25
9#
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,
               
接口中的所有方法必须是抽象方法

abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。

但是,一个类却可以实现多个interface。也许,

这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 18:54:05
10#
1,抽象类需要被继承,接口需要被实现
2,抽象类中可以抽象方法和非抽象方法,子类可以继承过来直接使用,接口中的方法全部是抽象方法,接口只能被子类实现。
3,抽象类只能单继承,接口可以多实现。
4,抽象类中定义的是一个体系中共性基本功能,接口 中定义的是扩展功能。
回复 使用道具 举报
黑马网友  发表于 2011-9-27 20:09:26
11#

抽象类

首先:抽象类也是一个类,那么它和普通的类有什么 差别呢??
抽象类是很多类向上抽取的一个结果
比如说   学生:有小学生  初中学生  大学生 那么他们的学习知识一样吗? 肯定是不一样的
但是他们都有相同的行为就是学习 不同的是他们学习的知识不一样 ,因此我们抽取他们的行为,只是方法的实现不一样,这样我,们就可以把它定义成一个抽象类,相比较方法有方法声明和方法体
抽象类就是了一个特殊的字符abstract 修饰的  
抽象类是不能new对象的 如果它可以new一个对象  那么对象调用它的方法有意思吗?它方法是没方法体的!
如果一个类继承了抽象类 那么它要实现抽象类的方法,否则它也是一个抽象类 就相当于把抽象方法复制到改类中,因为抽象方法只存在抽象类!

接口就是特殊的抽象类 接口中只能定义方法!
抽象类不能new对象    还有抽象方法只存在抽象类中 好好理解这2点  抽象类和java普通类没什么差别!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 20:10:01
12#

抽象类

首先:抽象类也是一个类,那么它和普通的类有什么 差别呢??
抽象类是很多类向上抽取的一个结果
比如说   学生:有小学生  初中学生  大学生 那么他们的学习知识一样吗? 肯定是不一样的
但是他们都有相同的行为就是学习 不同的是他们学习的知识不一样 ,因此我们抽取他们的行为,只是方法的实现不一样,这样我,们就可以把它定义成一个抽象类,相比较方法有方法声明和方法体
抽象类就是了一个特殊的字符abstract 修饰的  
抽象类是不能new对象的 如果它可以new一个对象  那么对象调用它的方法有意思吗?它方法是没方法体的!
如果一个类继承了抽象类 那么它要实现抽象类的方法,否则它也是一个抽象类 就相当于把抽象方法复制到改类中,因为抽象方法只存在抽象类!

接口就是特殊的抽象类 接口中只能定义方法!
抽象类不能new对象    还有抽象方法只存在抽象类中 好好理解这2点  抽象类和java普通类没什么差别!

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题加分!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-28 00:15:49
13#
那么接口和抽象类的使用范围有什么不同?
为什么java既要有抽象类又要有接口呢

   接口主要是用于定义规范的,就像一个简单的系统,接口就像是一个系统的结构,而抽象类可以有自己的实现,就像一个半成品,有的功能自己已经实现,而其他的功能需要子类去完成. 这样的话代码可以有很大的重用因为公共的功能抽象类已经实现了,子类只需要完善其他的功能.
   因为java是单继承的,如果一个类已经继承了抽象类,那么就不能继承其他类了,而接口不存在这样的问题

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 17:37:07
14#

抽象类与接口的不同!

抽象类其内部可以存在不抽象的方法,而接口内部的方法必须全部都是抽象的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马