Java中接口(interface)与抽象类(abstract)的区别

Java中,接口(interface)与抽象类(abstract class)是两个不一样的机制。


先来看两者的概念。

一、概念

1、接口:接口是方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。

接口可以看作是一种特殊的类(一种纯抽象类),在接口内部,只能声明方法,但不能有方法的具体实现。

接口可以继承接口,但不能继承类。同时,接口不能实现接口

2、抽象类:用于表达概念而不用于构造实体的类。

一般设置一个抽象类作为父类,这个抽象类是为了表达一种公共的概念,比如Animal( )类就是一个抽象的概念(不是具体的),该类就可以设置为一个抽象类,而Animal( )的子类可以是具体的实现,比如Pig( )类、Dog( )类。

抽象类可以定义变量,但不能创造出抽象类的对象。如:

Animal dog = new Dog( ); //这是允许的,因为这是一种向上造型。

抽象函数的类必须是抽象类抽象函数只能声明,但不能有具体的实现。


然后我们来说说接口和抽象类的区别在哪里。

二、区别

1、相同点:

两者都不能创造出自身对象。

2、不同点:

(1) 接口中只能有方法的声明,不可以有方法的实现。而抽象类中可以有方法的声明和实现(但抽象函数不能有具体的实现)。

(2) Java没有多重继承机制,但是类可以实现多个接口,因此,在某种意义上,接口弥补了Java没有多重继承的缺点。而类只能继承于一个抽象类。

(3) 接口内的变量默认是public static final型的,必须有初值,且不能被更改;接口内的方法都是public abstract型,不能有具体实现。而抽象类中可以有变量默认是defalut型,也可以有具体实现的方法。

(4) 接口主要是用于方法的合集,适合日后方法的添加删除。而抽象类主要用于表达一种“总”的概念,使逻辑更加清晰,让代码更贴近生活,但抽象类内部不适合在日后进行更改。

发布了26 篇原创文章 · 获赞 9 · 访问量 8223

猜你喜欢

转载自blog.csdn.net/weixin_41664064/article/details/103786103