Java接口与抽象类七大核心区别解析
Java中接口和抽象类的7大区别!
Java是一种面向对象的编程语言面向对象的编程语言有四个主要特征:抽象、封装、继承和多态性。
本文介绍的接口和抽象类是面向对象编程中“抽象”的具体实现,即用接口和抽象类来定义实体类(对象)的公共行为。
注意:本文以下内容基于JDK8版本。
接口是Java语言中的一种抽象类型,用于定义对象的公共行为。
它的关键词是接口。
方法和常量可以在接口实现中定义默认方法的实现,如下代码所示:
连接下一步,创建实现上述接口的类:
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。
抽象类的用法如下:
然后,使用普通的类继承上面的摘要:
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关键字定义的。
接口使用implements关键字来定义其具体实现。
抽象类使用extensions关键字来实现继承。
一个接口可以有多个类实现,如下图:抽象类的子类只能继承一个抽象类,如下图如下图,继承多个抽象类会报错:在Java语言中,一个类只能继承一个父类(单继承),但是它可以实现多个接口。
接口中的访问控制字符只能是public,如下图:
接口中的属性是默认由publicstaticfinal修改。
抽象类中属性的访问控制字符没有限制,可以是任意控制字符,如下图:
变化5:方法的控制字符不同接口中方法的默认控制字符是public的,不能定义为其他控制符号,如下图:抽象类中方法控制符号没有限制抽象方法不能用private修饰,如下代码所示:
区别六:实现不同的方法接口上的公共方法不能用具体方法实现JDK8以后,必须实现静态方法和默认方法通过方法,如下代码所示:从上面的结果可以看出:静态或默认方法如果没有方法就会报错实现它,而普通方法如果有方法实现它就会报错。
抽象类中的普通方法可以用方法来实现,但是抽象方法不能用方法来实现,如下代码所示:从上面的结果可以看出,如果抽象类中的普通方法没有用方法实现的,会报错;如果抽象方法有方法实现,则会报错。
静态代码块不能在接口中使用,如下代码所示:静态代码块可以在抽象类中使用,如下代码所示:
总结接口和抽象类都是用来定义对象的公共行为,但它们有以下七点不同:
话定义的键不同。
子类以不同的方式继承或实现关键字。
类型扩展不同:抽象类具有单继承,而接口具有多继承。
方法访问控制特点:抽象类没有限制,但抽象类中的抽象方法不能被私有接口修改,默认界面控制字符为public;
属性方法控制字符:对于抽象类没有限制,但是对于接口有限制。
方法实现不同:抽象类中的常用方法必须实现,抽象方法一定不能实现,而接口中的常用方法则不能实现,但JDK8中的静态方法和默认方法;
静态代码块的使用不同:抽象类可以有静态代码块,但接口不能。
你会使用哪些接口和其他接口知道抽象类之间的区别吗?欢迎大家在评论区留言补充。
是非由你来判断,别人的批评和赞扬由你来衡量,得与失由你来计算。
公众号:中国Java社区
java中抽象类和接口的具体区别是什么?
讨论Java中的抽象类和接口主要区别在于功能需求和实现方法。主要区别如下:1.构造函数:抽象类允许定义构造函数,用于实例化对象。
相反,接口不支持构造函数,旨在定义方法规范而无需实现规范。
2.状态保留:抽象类可以保存属性和状态来实现某些行为。
接口只关注所定义方法的规范,不包括对象的具体状态。
基于以上特点,抽象类适合提供构造函数和维护状态的实际情况。
接口适用于想要定义一组方法规范且不关心实现细节的抽象功能需求。
选择使用抽象类或接口时,请考虑您的设计目标:实例化对象并初始化状态,或定义功能行为的详细信息。
java中抽象类和接口的区别?
抽象类用于获取公共子类特征。
它不能被实例化,只能用作类的超类。
抽象类是用于在继承层次结构中创建子类的模板。
接口是抽象方法的集合。
如果仪器类成为仪器的对象,则它接收该仪器的抽象方法。
这就像一个契约模型,如果你想实现这个接口,那么你必须确保使用这些方法。
它是一个接口形式,它本身不能做任何事情。
扩展概念:
抽象类常用于表示从分析中抽象出来的概念,从问题领域的分析中设计出不同的具体概念但本质上是一样的。
编程意义上通常用abstract代替的类就是抽象类。
在C++中,包含纯虚函数的类称为抽象类,它不能生成对象;
抽象类是不完整的,只能用作基类。
在面向对象方法中,抽象类主要用于隐藏全局变量的类型和行为。
参考资料:抽象类百度百科接口百度百科