抽象类(abstract class)和接口(Interface)的区别

基于Python的MGWR多尺度地理加权回归模型 多尺度地理加权回归(MGWR)变量之间的关系在地理空间上不是均一的,所有特征变量的影响都在不同的空间范围(带宽)内变化,某些变量可能表现出局部性影响(小带宽),某些变量可能表现出全局性影响(大带宽),通过优化每个特征变量的带宽,捕捉到空间关系的多尺度特性,得到更细致的模型解释。 阅读详情

前言

  • 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予了Java强大的面向对象能力。
  • 二者具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstractclass和Interface的选择显得比较随意。其实,两者之间还是有很大的区别的。
  • 本文将对它们之间的区别进行剖析,并提供一个在二者之间进行选择的依据。

抽象类是什么?

本文中的抽象类表示的是一个抽象体,并非直接从abstract class翻译而来,而abstract class仅仅是Java语言中用于定义抽象类的一种方法,请读者注意区分)

  • 在面向对象的概念中,所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

  • 抽象类的定义
    是对一系列看上去不同,但是本质上相同的具体概念的抽象,往往用来表征我们在对问题进行分析、设计中得出的抽象概念

    • 比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们本质上又都属于这样一个概念:形状,形状这个概念在问题领域是不存在的,所以形状就是一个圆形、三角形的抽象类。
    • 正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。

为什么要有抽象类?

  • 用于类型隐藏
    在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类。
  • 用于拓展对象的行为功能
    这一组任意个可能的具体实现则表现为所有可能的派生类(子类),模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。

如何进行抽象类的定义?

抽象类(abstract class)和接口(Interface)在Java语言中都是用来进行抽象类定义的两种主要方法

抽象类(abstract class)

  • 定义:包含抽象方法的的类是abstract class

    用abstract关键字修饰

  • 作用:abstractclass是为了把相同的东西提取出来,即重用

  • 使用abstractclass语法规定

语法备注
抽象类定义用abstract关键字修饰要通过子类进行实例化
抽象类是不能被实例化的要通过子类进行实例化
子类必须重写父类的所有抽象方法抽象方法:声明但却未被实现的方法,用abstract关键字修饰
含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法
抽象类是用来被它的子类继承的关键字extends
抽象类是在功能上的一个规定

Interface

  • 定义:比abstract class更加抽象,是一种特殊的abstract class

    用Interface关键字修饰

  • 作用:Interface是为了把程序模块进行固化的契约,是为了降低偶合

  • 使用Interface的语法规定
语法备注
接口定义用Interface关键字修饰 
接口中的所有方法都是抽象的可以用abstract修饰,也可以省略
接口中的方法必须是用public修饰,或不写但是不能被其他修饰符修饰
接口中的属性必须是全局常量publicstaticfinal修饰
抽象类是用来被它的子类实现的关键字Implements
抽象类是在结构上的一个规定
接口不能被实例化
子类实现接口时需要实现接口中的所有方法若有一个未不实现,该子类就是抽象类abstractclass

实例
下面以定义一个名为Demo的抽象类为例来说明这种不同。

  • 使用abstract class的方式定义Demo抽象类:
    abstract classDemo{
    abstract void method1();
    abstract avoid method2();}
  • 使用interface的方式定义Demo抽象类:
    interface Demo{
    void method1();
    void method2();}

二者的相同点

都不能被实例化

二者的区别

类型abstract classInterface
定义abstract class关键字Interface关键字
继承抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类接口只可以继承接口(一个或多个);子类可以实现多个接口
访问修饰符抽象方法可以有publicprotecteddefault这些修饰符接口方法默认修饰符是public。你不可以使用其它修饰符
方法实现可定义构造方法,可以有抽象方法和具体方法接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现
实现方式子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
作用了把相同的东西提取出来,即重用为了把程序模块进行固化的契约,是为了降低偶合

总结

本文对抽象类(abstract class)和接口(Interface)进行了简单的总结,有兴趣可以继续关注Carson_Ho的安卓开发笔记,不定期分享关于安卓开发的干货

最新 抖音 X-Gorgon 0408 8408 设备注册协议 抖音app先是检测了你的手机cpu架构,是x86还是armeabi,通过cpu架构的不同来调用so内不同的xg方法,所以导致现在最新版抖音app的xg算法有04088408两种。两种都是最新版,因为我发现当我使用oppo手机安装最新版抖音抓包的xg是8408,而当我用小米或者华为安装最新版抖音,抓包以后发现xg是0408。抖音IOS XG84 设备注册激活协议代码片段。... 阅读详情

相关推荐

【HarmonyOS】ArkUI的组件扩展

ArkuI的组件扩展主要是通过等装饰器来对于一些常用的自定义组件进行封装, 来简化UI开发流程, 提高自定义组件的可复用性。

2302_79763237的博客 1148

关于interface abstract class以及普通的class区别

首先声明:方法有两种abstract 普通方法;abstract修饰的方法交抽象方法,不需要方法体; 如图,在eclipse中创建一个abstract class,其中定义一个抽象方法 ,这个方法要是有方法体就会报错。 1.interface中方法默认是抽象抽象方法,abstract class则相反 (1)interface中的方法默认为abstract,即使你不加abstract修饰符他也是抽象方法,不能有方法体;但JDK1.8之前里面只能有抽象方法,不能有方法体的,但是1.8之后interface

qq873143381的博客 789

CQESQE 以及 PQADQA的区别

‌:PQA聚焦产品全生命周期流程管理,DQA专注于设计阶段的质量控制。

a1809032425的博客 1839

java 抽象类(abstract)接口(interface)

1 抽象类需要注意的细节: 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。 理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。 抽象类中,是有构造器的,其是供子类创建对象时,初始化父类成员使用的。 理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。 理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设

冰茶不冰的博客 2187

抽象(Abstract)类与接口(interface)

JAVA的抽象类接口

Tweek_的博客 1999

抽象类abstract class接口interface)有什么异同

抽象类可以包含非抽象的方法,而接口中的方法必须是抽象的。 2、继承抽象类在Java语言体系中体现一种继承关系,在合理的继承关系中,父类派生类比如按存在is-a关系。而实现接口则体现一种has-a关系,实现者仅仅是实现了interface定义的契约而已。 3、抽象类中可以有成员变量,而接口中不能有成员变量。 4、抽象类接口中都可以包含静态成员变量,抽象类中的静态成员变量的属性可以是任意的,

spilit的博客 619

接口interface)与抽象类abstract class)的区别

接口interface)与抽象类abstract class)的区别 1、定义接口的关键字是 interface,定义抽象类的关键字是abstract class 2、从设计上来说,接口是对行为的抽象,抽象类是对事物的抽象 3、一个类可以实现多个接口,但只能继承一个抽象类 4、接口中的方法都是抽象的,抽象类的方法可以是抽象的也可以是非抽象的方法(已经实现的方法) 5、抽象类可以包含静态方法,但是接口不可以 6、接口抽象类都可以定义变量,但是接口定义的变量必须是公共的、静态的、Final,而抽象类定义的

fuzhijieabc的博客 1826

java 抽象接口区别_Java:详解 抽象类abstract class) & 接口Interface)的区别

前言在Java中,实现 抽象的机制有2种:抽象类(abstract class)接口(Interface)二者非常类似,甚至可相互替换,因此很多开发者开发时对于二者的选择十分随意。其实,2者之间存在很大区别本文将对抽象类(abstract class)接口(Interface) & 之间的区别 进行详细 讲解剖析目录示意图1. 知识储备:抽象是什么?示意图下面,将主要讲解Java中抽象...

weixin_42202716的博客 308

【JAVA】 abstract class抽象类interface接口有什么区别

含有 abstract 修饰符 class 即为抽象类抽象类不能创建实际对象,含有抽象方法的抽象类必须定义为 abstract class接口可以说成是一种特殊的抽象类接口中的所有方法都必须是抽象的,接口中的方法定义默认为 public abstract 类型,接口中的成员产量类型默认为 public static final。 两者的区别: a. 抽象类可以有构造方法,接口中不能有构造方...

411

接口Interface抽象类Abstract Class)的区别是什么?

在Java中,接口Interface抽象类Abstract Class)都是用于定义类的蓝图,并为子类提供方法实现的基础。它们在设计使用上有一些关键区别

m0_57083961的博客 4048

抽象类(Abstract Class)接口(Interface)区别

接口Interface抽象类Abstract Class

Good days :) 的博客 1879

抽象类abstract class接口interface区别

抽象类abstract class接口interface区别 区别一: 抽象类是一类事物的高度聚合。比如动物,猫、狗、猪、牛…等等都属于动物。所以动物类就是抽象类。 猫类,狗类,猪类…等等都可以继承动物类。 代码如下: 接口是定义行为规范,比如"吃",很多东西都可以叫,猫、人、老虎…等等都可以吃。所以就可以定义一个"吃"的接口。 代码如下: 区别二: 抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 抽象类定义方法: 接

qikang_的博客 195

接口 Interface抽象类 abstract class区别

接口: 所有方法都是抽象方法,只能有成员变量,只能是方法的声明。且成员变量是默认的 public static final 类型,接口不能实例化自己。方法隐式指定是 public abstract 。一般情况下不在接口定义变量。 抽象类: 一个类含有抽象方法,就可以叫抽象类抽象类...

113

JAVA基础 之 抽象类接口 大相径庭

抽象类(abstract class)接口(interface)有什么异同? 不同: 抽象类: 1.抽象类中可以定义构造器 2.可以有抽象方法具体方法 3.接口中的成员全都是 public 的 4.抽象类中可以定义成员变量 5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法 6.抽象类中可以包含静态方法 7.一个类只能继承一个抽象类 接口: 1.接口中不能定义构造器 2.方法全部都是抽象方法 3.抽象类中的成员可以是 private、默认、protected、public 4.接口中定义的成

AnythingIs_possible的博客 375

抽象类 接口

含有abstract修饰符的class即为抽象类abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract classabstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须

mjd的专栏 689

普通类,抽象类接口区别

1.普通类可以实例化,接口都不能被实例化(它没有构造方法),抽象类如果要实例化,抽象类必须指向实现所有抽象方法的子类对象(抽象类可以直接实例化,直接重写自己的抽象方法),接口必须指向实现所有所有接口方法的类对象。 2.抽象类要被子类继承,接口要被子类实现。 3.接口只能做方法的声明,抽象类可以做方法的声明,也可以做方法的实现。 4.接口里定义的变量只能是公共的静态常量,抽象类中定义的变量是普通变量...

Mashiro_life的博客 545

PHP中的 抽象类abstract class 接口interface

一、 抽象类abstract class1.抽象类是指在class前加了abstract关键字且存在抽象方法(在类方法function关键字前加了abstract关键字)的类。2.抽象类不能被直接实例化。抽象类中只定义(或部分实现)子类需要的方法。子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。3.如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法。如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在class前面加上abstract关键字,并且不能被

sunlylorn的专栏 5万+

Interfaceabstract类的区别

二者的相同点 都不能被实例化 二者的区别 类型abstract classInterface 定义 abstract class关键字 Interface关键字 继承 抽象类可以继承一个类实现多个接口;子类只可以继承一个抽象类 接口只可以继承接口(一个或多个);子类可以实现多个接口 访问修饰符 抽象方法可以有public、p...

216

abstract classinterface区别

1、abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 2、在abstract class中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的...

深海的鱼 4961

interfaceclassabstract class区别

interfaceclassabstract class区别? 1、接口里只有抽象方法,不能包含普通方法,没有普通成员变量,没有构造方法;普通类里没有抽象方法,有普通方法、成员变量、构造方法;抽象类里可以有抽象方法也可以有普通方法,有普通成员变量构造方法。 2、接口不能实例化,需要实现类来实现里面的方法;抽象类里的抽象方法需要子类继承来实现;普通类可以自己实现自己的方法。 3、接口的访问权...

null_6的博客 1754

基于单片机的电子电子秤的设计外文文献原文及翻译.docx

基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx基于单片机的电子电子秤的设计外文文献原文及翻译.docx

2026年最新整理200份(PPT+WORD)数字智能工厂+工业互联网+供应链+智能制造+制造业数字化+MES+APS+PLM+ERP+WMS+EMS+SCADA+MOM+SCM+CRM+QMS

2026年最新整理200份(PPT+WORD)数字智能工厂+工业互联网+供应链+智能制造+制造业数字化+MES+APS+PLM+ERP+WMS+EMS+SCADA+MOM+SCM+CRM+QMS

上一篇: 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
下一篇: 最全面、最易懂的Android屏幕适配解决方案
aptentity
博客等级 码龄20年 54粉丝 40原创
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值