Java接口与抽象类七大核心区别解析

创始人
2024-12-15 18:13:45
0 次浏览
0 评论

Java中接口和抽象类的7大区别!

Java是一种面向对象的编程语言面向对象的编程语言有四个主要特征:抽象、封装、继承和多态性。
本文介绍的接口和抽象类是面向对象编程中“抽象”的具体实现,即用接口和抽象类来定义实体类(对象)的公共行为。

注意:本文以下内容基于JDK8版本。

接口

接口是Java语言中的一种抽象类型,用于定义对象的公共行为。
它的关键词是接口。
方法和常量可以在接口实现中定义默认方法的实现,如下代码所示:

publicinterfaceInterface_1{intcount=1;voidsayHi();//默认方法defaultvoidprint(){System.out.println();.println("Doprintmethod.");}//静态方法staticvoidsmethod(){System.out.println("Dostaticmethod.");}}

连接下一步,创建实现上述接口的类:

publicclassInterfaceImpl_1implementsInterface_1{@OverridepublicvoidsayHi(){System.out.println("Hi,IamInterfaceImpl1.");}publicstaticvoidmain(String[]args){InterfaceImpl_1inter=newInterfaceImpl_1();.sayHatic(inter.sayHatic);MethodInterfaceExample.smethod();//调用接口上的常量countSystem.out.println(InterfaceExample.count);}}

执行上述程序的结果如下:通过上面的代码和执行结果我们可以得出以下结论:

JDK8中的接口可以定义静态方法和默认方法,并且这两个方法可以包含具体的实现代码。

要实现接口,请使用implements关键字。

接口不能直接实例化。

接口中定义的变量默认为publicstaticfinal类型。

子类不需要重写接口上的静态方法和默认方法;如果不重写,就会默认调用接口方法的实现。

抽象类

抽象类与接口类似,也是用来定义对象的公共行为,并且不能直接实例化继承关键字class。
抽象类的用法如下:

publicabstractclassAbstractExample{//定义公共变量intcount=2;//定义私有变量privatestaticinttotal=10;//定义抽象方法publicabstractvoidmethodA();//定义公共方法publicvoidmethodB(){System.out.println("Hi,methodB.");}}

然后,使用普通的类继承上面的摘要:

publicclassAbstractSonextendsAbstractExample{@publicsupportvoidmethodA(){System.out.println("Hi,methodA.");}publicstaticvoidmain(String[]args){AbstractSonabs=newAbstractSon();//重新给变量赋值抽象类abs.count=666;System.out.println(abs.count);//抽象类中的抽象方法abs.methodA();//类中的普通方法Abstractabs.methodB();}}

上述程序的执行结果如下:通过上述代码和执行结果,可以得出以下结论:

抽象类是使用abstract关键字声明的。

抽象类可以包含通用方法,抽象方法不能由具体代码实现。

抽象类必须使用extensions关键字来实现继承。

抽象类不能直接实例化。

抽象类中对属性控制字符没有限制,可以定义私有类型属性。

接口和抽象类的区别主要体现在以下七个方面。

区别一:定义关键字不同

接口是使用关键字interface来定义的。
抽象类是使用abstract关键字定义的。

区别2:继承或实现关键字不同

接口使用implements关键字来定义其具体实现。
抽象类使用extensions关键字来实现继承。

区别三:子类扩展的数量不同

一个接口可以有多个类实现,如下图:抽象类的子类只能继承一个抽象类,如下图如下图,继承多个抽象类会报错:在Java语言中,一个类只能继承一个父类(单继承),但是它可以实现多个接口。

区别4:访问控制属性的字符不同

接口中的访问控制字符只能是public,如下图:

接口中的属性是默认由publicstaticfinal修改。

抽象类中属性的访问控制字符没有限制,可以是任意控制字​​符,如下图:

变化5:方法的控制字符不同

接口中方法的默认控制字符是public的,不能定义为其他控制符号,如下图:抽象类中方法控制符号没有限制抽象方法不能用private修饰,如下代码所示:

区别六:实现不同的方法

接口上的公共方法不能用具体方法实现JDK8以后,必须实现静态方法和默认方法通过方法,如下代码所示:从上面的结果可以看出:静态或默认方法如果没有方法就会报错实现它,而普通方法如果有方法实现它就会报错。

抽象类中的普通方法可以用方法来实现,但是抽象方法不能用方法来实现,如下代码所示:从上面的结果可以看出,如果抽象类中的普通方法没有用方法实现的,会报错;如果抽象方法有方法实现,则会报错。

区别7:静态代码块使用不同

静态代码块不能在接口中使用,如下代码所示:静态代码块可以在抽象类中使用,如下代码所示:

总结

接口和抽象类都是用来定义对象的公共行为,但它们有以下七点不同:

话定义的键不同。

子类以不同的方式继承或实现关键字。

类型扩展不同:抽象类具有单继承,而接口具有多继承。

方法访问控制特点:抽象类没有限制,但抽象类中的抽象方法不能被私有接口修改,默认界面控制字符为public;

属性方法控制字符:对于抽象类没有限制,但是对于接口有限制。

方法实现不同:抽象类中的常用方法必须实现,抽象方法一定不能实现,而接口中的常用方法则不能实现,但JDK8中的静态方法和默认方法;

静态代码块的使用不同:抽象类可以有静态代码块,但接口不能。

本文收录了常见的Java面试题:https://gitee.com/mydb/interview

你会使用哪些接口和其他接口知道抽象类之间的区别吗?欢迎大家在评论区留言补充。

是非由你来判断,别人的批评和赞扬由你来衡量,得与失由你来计算。

公众号:中国Java社区

java中抽象类和接口的具体区别是什么?

讨论Java中的抽象类和接口主要区别在于功能需求和实现方法。
主要区别如下:1.构造函数:抽象类允许定义构造函数,用于实例化对象。
相反,接口不支持构造函数,旨在定义方法规范而无需实现规范。
2.状态保留:抽象类可以保存属性和状态来实现某些行为。
接口只关注所定义方法的规范,不包括对象的具体状态。
基于以上特点,抽象类适合提供构造函数和维护状态的实际情况。
接口适用于想要定义一组方法规范且不关心实现细节的抽象功能需求。
选择使用抽象类或接口时,请考虑您的设计目标:实例化对象并初始化状态,或定义功能行为的详细信息。

java中抽象类和接口的区别?

抽象类用于获取公共子类特征。
它不能被实例化,只能用作类的超类。
抽象类是用于在继承层次结构中创建子类的模板。

接口是抽象方法的集合。
如果仪器类成为仪器的对象,则它接收该仪器的抽象方法。
这就像一个契约模型,如果你想实现这个接口,那么你必须确保使用这些方法。
它是一个接口形式,它本身不能做任何事情。

扩展概念:

抽象类常用于表示从分析中抽象出来的概念,从问题领域的分析中设计出不同的具体概念但本质上是一样的。

编程意义上通常用abstract代替的类就是抽象类。
在C++中,包含纯虚函数的类称为抽象类,它不能生成对象;

抽象类是不完整的,只能用作基类。
在面向对象方法中,抽象类主要用于隐藏全局变量的类型和行为。

参考资料:抽象类百度百科接口百度百科

文章标签:
接口 抽象类
热门文章
1
SQL多表连接查询全解析:JOIN语句应... sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...

2
Java中字符串类型详解:String与... 变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...

3
JavaSE与JavaEE:从基础到企业... javase 和javaee的区别?JavaSE和JavaEE...

4
Java程序员面试必知:核心技术问答与技... java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...

5
Java.exe与Javaw.exe:区... 程序中java和javaw有什么区别java和javaw的区别:两者都是Java...

6
深入解析:Java中的javax包及其与... JAVA导入时,什么是javax?awt是java1.0,swing是java2...

7
大专生转行自学Java,迷茫时如何找到方... 我是大专生因没有好好学所以现在后悔了我想从事软件编程我正在自学java不知道怎么...

8
Java中Scanner类导入位置及使用... 在java中这句语言“importjava.util.Scanner;”是什么意...

9
Java数组倒序输出:排序后逆序存储方法... Java数组倒序输出?1.反转数组的方法有很多种,比如先排序,然后倒序存储pub...

10
C语言改错难题解析:第二处错误详解及修改... 请问这个C语言改错题怎么做呀?我做了很久都没写出来,第二处错误不知道怎么改。那位...