返回顶部
首页 > 资讯 > 精选 >abstract class和interface有什么不同
  • 808
分享到

abstract class和interface有什么不同

2023-06-17 23:06:40 808人浏览 独家记忆
摘要

这篇文章主要讲解了“abstract class和interface有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“abstract class和interface有什么不同”吧!我

这篇文章主要讲解了“abstract class和interface有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“abstract class和interface有什么不同”吧!

我们知道abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?

面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。

从语法定义层面看abstract class和interface

在语法层面,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方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。

编程的角度来看,abstract class和interface都可以用来实现"design by contract"的思想。但是在具体的使用上面还是有一些区别的。

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

其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。

在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。

同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心。

感谢各位的阅读,以上就是“abstract class和interface有什么不同”的内容了,经过本文的学习后,相信大家对abstract class和interface有什么不同这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: abstract class和interface有什么不同

本文链接: https://lsjlt.com/news/294140.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • abstract class和interface有什么不同
    这篇文章主要讲解了“abstract class和interface有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“abstract class和interface有什么不同”吧!我...
    99+
    2023-06-17
  • abstract class和interface的本质是什么
    本篇内容介绍了“abstract class和interface的本质是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们知道abstr...
    99+
    2023-06-17
  • abstract class和interface的区别是什么
    本文小编为大家详细介绍“abstract class和interface的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“abstract class和interface的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-03
  • interface和abstract class的区别
    interface和abstract class的区别interface和abstract class之间有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。 Abstract classInt...
    99+
    2020-06-17
    java教程 interface abstract class 区别
  • 怎么使用Java中的abstract和interface
    本篇内容介绍了“怎么使用Java中的abstract和interface”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、简介abstrac...
    99+
    2023-06-25
  • TypeScript中的class和interface怎么用
    这篇文章主要介绍了TypeScript中的class和interface怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇TypeScript中的class和interface怎么用文章都会有所收获,下面我们...
    99+
    2023-06-27
  • 深入浅析java中class与class.forName() 有什么不同
    这篇文章给大家介绍深入浅析java中class与class.forName() 有什么不同,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Class对象的生成方式如下:1、类名.class  &nbs...
    99+
    2023-05-31
    java class.forname class
  • C++和Python有什么相同和不同
    c++++ 和 python 的主要区别是:范例:c++ 是编译语言,而 python 是解释语言。性能:c++ 是性能导向语言,而 python 更注重可读性和快速开发。类型系统:c+...
    99+
    2024-05-14
    python c++ 网络编程
  • Typescript中interface与type的相同点与不同点是什么
    今天小编给大家分享一下Typescript中interface与type的相同点与不同点是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-07-04
  • RabbitMQ和Kafka有什么不同
    这篇文章主要讲解了“RabbitMQ和Kafka有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RabbitMQ和Kafka有什么不同”吧! # ...
    99+
    2024-04-02
  • relative和absolute有什么不同
    本文小编为大家详细介绍“relative和absolute有什么不同”,内容详细,步骤清晰,细节处理妥当,希望这篇“relative和absolute有什么不同”文章能帮助大家解决疑惑,下面跟着小编的思路慢...
    99+
    2024-04-02
  • Python3和Python2有什么不同
    今天就跟大家聊聊有关Python3和Python2有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、打印时,py2需要可以不需要加括号,py3 需要python 2 :pr...
    99+
    2023-06-15
  • ajax和javascript有什么不同
    这篇文章给大家介绍ajax和javascript有什么不同,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScript可以...
    99+
    2023-06-14
  • C#和C++有什么不同
    本篇内容介绍了“C#和C++有什么不同”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在C语言中,资源管理是一个极为繁琐易错的工作,大多复杂的...
    99+
    2023-06-18
  • HashMap和Hashtable有什么不同
    HashMap和Hashtable有什么不同,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。线程安全两者最主要的区别在于Hashtable是线程安全,而HashM...
    99+
    2023-06-19
  • Ubuntu和Fedora有什么不同
    本篇内容主要讲解“Ubuntu和Fedora有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu和Fedora有什么不同”吧!桌面概述Fedora提供了vanilla GNOME...
    99+
    2023-06-27
  • service和systemctl有什么不同
    这篇文章主要介绍了service和systemctl有什么不同的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇service和systemctl有什么不同文章都会有所收获,下面我们一起来看看吧。service命令...
    99+
    2023-06-27
  • Java 和 JavaScript 有什么不同?
    Java 和 JavaScript 是两种编程语言,它们有着不同的用途和特点。本文将深入探讨 Java 和 JavaScript 的不同之处,帮助你更好地理解这两种语言。 Java 是一种面向对象的编程语言,最初由 Sun Microsys...
    99+
    2023-06-28
    文件 javascript numpy
  • Java和JavaScript:有什么不同?
    Java和JavaScript这两个名字看似相似,但实际上它们是完全不同的编程语言。在本文中,我们将探讨Java和JavaScript的不同之处。 Java和JavaScript的起源 Java是由Sun Microsystems公司...
    99+
    2023-09-10
    javascript shell linux
  • Java和C#有什么不同
    小编给大家分享一下Java和C#有什么不同,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java和C#都提供了对网络的不同抽象层,编程人员可以使用不同的网络接口完...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作