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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁劲松 中级黑马   /  2014-1-20 10:22  /  1500 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

java中抽象类和接口有什么区别?

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

8 个回复

正序浏览
在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。

  使用abstract class的方式定义Demo抽象类的方式如下:

abstract class Demo{
abstract void method1();
abstract void method2();



  使用interface的方式定义Demo抽象类的方式如下:

interface Demo{
void method1();
void method2();

}
首先,abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系(因为Java不支持多继承 -- 转注)。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。

  其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。
回复 使用道具 举报
浮出一个美 发表于 2014-1-20 11:14
无论是度娘还是谷歌,我相信他们两口子都能很好的解决你这种很常见的问题。 ...

显然再刷分。。。
回复 使用道具 举报
抽象类中有抽象方法,需要继承它的类去重写。
接口中的所有方法必须是抽象方法,由实现它的类重写。
java是单继承,多实现的机制,如果你已经继承了一个类,还需要继承其他类,不妨去实现接口来的灵活
回复 使用道具 举报
相同点:
抽象类和接口都是类不断向上抽取得来的,抽象类和接口中的抽象方法都是用来做方法声明的,具体的实现需要在子类中实现,很好的提高了程序的扩展性。
区别:
1.特点:
(1)
抽象类中可以定义非抽象方法;
接口中的方法只能是抽象方法;
(2)
抽象类体现的是继承关系;
接口体现的是实现关系;
(3)
抽象类是is a的关系;
接口是like a的关系;
2. 作用
(1)
抽象类是用来进行多个子类共有方法的定义的;
接口是用来进行功功能扩展的;
(2)
抽象类不知道多继承;
接口支持多继承,以及多实现,因此,提供了很好的扩展性。
回复 使用道具 举报
1、抽象类只能被单继承
接口可以多实现,接口的出现避免了多继承的局限性。
2、抽象类中的数据特点:成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口中的数据特点:成员变量:是常量。默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法:没有构造方法
3、抽象类中定义的是继承体系中的共性功能。
接口中定义的是继承体系中的扩展功能。
4、抽象类被继承是"is a"关系:xx是yy的一种
接口被实现是"like a"关系:xx像yy的一种
回复 使用道具 举报
无论是度娘还是谷歌,我相信他们两口子都能很好的解决你这种很常见的问题。
回复 使用道具 举报
接口子类后面加的是implements
接口中的变量都是常量 而抽象不是
抽象类定义的方法都是共性的方法 而接口不是
抽象类可以定义非抽象方法 而接口是
抽象类是方法前面默认修饰符是 default 而接口是 public
回复 使用道具 举报
本帖最后由 dapeng111 于 2014-1-20 10:37 编辑

第一:抽象类和接口都是一个抽象的类,编译后生成.class文件。
第二:抽象类和接口都需要子类去实现父类中的抽象的方法。
第三:在实现抽相类的时候子类后面加的是extends,实现接口的时候子类后面加的interface
第四:实现抽象类的时候,只能单继承。实现接口的时候可以在子类的后面加上多个接口。希望能帮到你!

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马