Java的接口与抽象类

Java抽象类与接口详解 什么是抽象类,什么是接口,其用法,通过本文,尽收眼底。 阅读详情

深入理解Java的接口和抽象类

  对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。

  一.抽象类

  二.接口

  三.抽象类和接口的区别

一.抽象类

  抽象方法:

1

abstract void fun();//抽象方法的格式

   (1)抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类一定是抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。但是抽象类中不一定有抽象方法。

        (2)抽象方法只有定义没有方法体,方法名后面直接跟一个分号,而不是花括号。

            (3)构造方法,类方法(用static修饰的方法)不能声明为抽象方法。

1

2

3

[public] abstract class ClassName {

    abstract void fun();

}

  从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

      注意:

  1)抽象类必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

  2)抽象类不能用来创建对象;因为抽象类中含有无具体实现的方法。

         但是抽象类中一定有构造函数。主要为了初始化抽象类中的属性。通常由子类实现。

  3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。若子类打算不实现父类的抽象方法,则必须将子类也定义为abstract               类,由后面继承子类的类去实现父类的抽象方法。

  4)注意抽象类中可以没有抽象方法。

 

abstract与其他修饰符的关系:

final与abstract不能共存:即不能同时修饰一个类。

final:它的作用  修饰类代表不可以继承  修饰方法不可重写

abstract修饰类就是用来被继承的,修饰方法就是用来被重写的。

static static修饰的方法可以用类名调用,

 对于abstract修饰的方法没有具体的方法实现,所有不能直接调用,

也就是说不可以与static共存。

private

private修饰的只能在本类中使用,

abstract方法是用来被子类进行重写的,有矛盾

所有不能共存.

 

 

 

二.接口

  接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。

  接口的本质——接口是一种特殊的抽象类,这种抽象类里面只包含常量和方法的定义,而没有变量和方法的实现,

      一个类实现某组特地的接口需要使用implements关键字,具体格式如下:

1

2

class ClassName implements Interface1,Interface2,[....]{

}

  可以看出,允许一个类遵循多个特定的接口。如果一个非抽象类实现了某个接口,就必须实现该接口中的所有方法。对于实现某个接口的抽象类,可以不实现该接口中的抽象方法。因为接口中的方法全部是抽象的,所以抽象类可以实现也可以不实现里面的方法。

接口的特性

(1)接口可以实现多重继承。即一个类可以通过实现多个接口来弥补Java中的单继承缺点。

(2)接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),

(3)接口中的方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。接口中定义方法一般不用abstract作为标示符,因为接口中默认的都是抽象方法。

案例分析

 

 

 

 

 

三.抽象类和接口的区别

1.语法层面上的区别

  1)抽象类可以提供成员方法的实现细节设计层面上的,而接口中只能存在public abstract 方法;

  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

  4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

2.设计层面上的区别

  1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

  2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

  下面看一个网上流传最广泛的例子:门和警报的例子:门都有open( )和close( )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念:

1

2

3

4

abstract class Door {

    public abstract void open();

    public abstract void close();

}

  或者:

1

2

3

4

interface Door {

    public abstract void open();

    public abstract void close();

}

  但是现在如果我们需要门具有报警alarm( )的功能,那么该如何实现?下面提供两种思路:

  1)将这三个功能都放在抽象类里面,但是这样一来所有继承于这个抽象类的子类都具备了报警功能,但是有的门并不一定具备报警功能;

  2)将这三个功能都放在接口里面,需要用到报警功能的类就需要实现这个接口中的open( )和close( ),也许这个类根本就不具备open( )和close( )这两个功能,比如火灾报警器。

  从这里可以看出, Door的open() 、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

interface Alram {

    void alarm();

}

 

abstract class Door {

    void open();

    void close();

}

 

class AlarmDoor extends Door implements Alarm {

    void oepn() {

      //....

    }

    void close() {

      //....

    }

    void alarm() {

      //....

    }

}

 

 

 

 

 

abstract void fun();

  抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。

使用Qt和MX Component插件实现与菱PLC的通信 在本文中,我们介绍了如何使用Qt和MX Component插件实现与菱PLC的通信。我们首先安装和配置了MX Component插件,并在Qt项目中初始化和使用MX Component来连接、读取和写入PLC的数据。安装完成后,您需要在Qt项目中配置MX Component的路径,以便Qt可以找到所需的库文件。在本文中,我们将探讨如何使用Qt和MX Component插件来实现与菱PLC的通信。在主函数中,我们将初始化MX Component,并创建一个与PLC通信的示例。在上面的代码中,我们使用了。 阅读详情

相关推荐

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 434

Java抽象类和接口

本篇文章我们只谈了两件事:抽象类-接口。抽象类和接口是Java中两个非常重要的概念,它们各有独特的优势,共同特点是都很抽象。

LEE180501的博客 4655

SIC知识(8)--碳化硅的制备难点

6. 器件制造难点:碳化硅器件制造过程中的掺杂步骤需要在高温下完成,且需要采用高温离子注入的方式,这与传统硅基器件的扩散工艺不同。这些步骤需要精密的设备和严格的工艺控制,以确保器件的结构和功能。综上所述,碳化硅的制备难点相较于传统硅基器件主要在于更高的制备温度、更慢的生长速度、晶型控制的复杂性、后加工的难度、外延工艺的低效率以及器件制造的特殊要求和较高的成本。- **数据管理**:需要有效的数据管理系统来跟踪和记录生产过程中的每一个步骤,包括原料的批次、生长条件、加工参数等,以确保产品质量的可追溯性。

阿拉伯梳子的专栏 1595

【Java】抽象类与接口全解析

本文详细介绍了Java中抽象类和接口的核心概念与使用。抽象类用于描述不具备完整信息的对象,通过abstract修饰,不能实例化且必须被继承。接口则是公共行为规范标准,使用interface定义,支持多实现。文章对比了两者的语法规则、特性差异,并通过代码示例演示了具体应用场景,帮助读者掌握面向对象编程中这两个重要机制的使用方法与设计意义。

user340的博客 3025

遥感数据处理必看:哨兵1 SLC与GRD预处理差异全解析

本文详细解析了哨兵1号卫星SLC与GRD数据的预处理差异,从数据基础认知到实战应用全流程对比。重点介绍了SLC数据的轨道校正、辐射校正等关键步骤,以及GRD数据的简化处理流程,帮助用户根据应用场景选择合适数据类型。通过SNAP等工具的实际操作示例,提升遥感数据处理效率。

weixin_29035405的博客 339

肿瘤基因组分析实战:VAF、MAF、CCF这些指标到底怎么算?(附Python代码示例)

本文通过Python代码示例,详细解析了肿瘤基因组分析中VAF、MAF和CCF三大核心指标的计算逻辑与应用。文章从VCF文件解析入手,逐步演示了变异等位基因频率、次等位基因频率及癌细胞分数的计算方法,并探讨了拷贝数变异对结果的影响及克隆结构推断的实战流程,为生物信息分析提供实用指南。

silver的专栏 1006

Java 抽象类和接口

文章目录一、抽象类1.抽象类1.1抽象类的定义1.2抽象方法的定义方式1.3抽象类的定义方式2.抽象类和实例类的区别3.抽象类示例4.抽象类的特征二、接口1.接口1.1接口的定义1.1定义一个接口1.2 接口的使用1.3接口的注意事项2.接口示例3.接口的特征三、抽象类和接口的区别 一、抽象类 1.抽象类 1.1抽象类的定义 在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。 1.2抽象方法的

WYSCODER的博客 4869

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)

LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模拟与智能工况分析,为下一代eVTOL技术提供全维度验证工具。采用航空级应变传感器(精度±0.1% FS),同步捕获推力、扭矩、俯仰/滚转力矩,动态误差<1%。同时测试电驱动系统(单轴最大150kW)与混合动力单元(增程式),支持高压(800V)平台。通过MET数据采集软件,控制采集一体化,定制化,实时观察上百个传感器数据,实时更改测试需求。可搭配六维姿态平台,温湿度舱、振动台等环境模拟设备。

weixin_49209795的博客 874

【Java SE】抽象类和接口

本期主要讲解: 1、抽象类 1.1 抽象类的概念 1.2 抽象类的语法 1.3 抽象类的特性 1.4 抽象类的作用 2、接口 2.1 接口的概念 2.2 接口的语法规则 2.3 接口的简单使用 2.4 接口的特性 2.5 实现多个接口 2.6 接口之间的继承 2.7 抽象类和接口的区别 3、Object 类 3.1 认识Object类 3.2 获取对象信息 3.3 对象的比较 equals 方法​​​​​​​......

程序猿教你打篮球的博客 1874

云原生监控:Prometheus+Grafana监控Nginx实战

在云原生环境中,应用的高可用性和性能优化至关重要。Nginx作为一款广泛使用的高性能Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,对其进行有效的监控能够及时发现潜在问题,保障服务的稳定运行。本文章的目的是详细介绍如何使用Prometheus和Grafana构建一套完整的监控系统来监控Nginx,范围涵盖从环境搭建、数据采集、存储到可视化展示的整个流程。

AI云原生与云计算技术学院 1574

【SOUND】Linux音频子系统ASoC的驱动框架总分析

ALSA系统在芯片(ASoC)层的总体项目目标是为嵌入式芯片处理器(例如PXA2XX,AU1X00,IMX等)和便携式音频编解码器提供更好的ALSA支持。 在进入ASoC子系统之前,内核对SoC音频有一些支持,但是它有一些局限性:ASoC层旨在解决这些问题并提供以下内容特征 :为了实现这一切,ASoC基本上将嵌入式音频系统分为多个可重复使用的组件驱动程序:另外,这里提下OSS(Open Sound System)这个基本被弃用的音频框架。 可以参考Linux OSS架构声卡驱动框架 2.3 ASoC重要

wang 恒 的博客 1781

java之抽象类与接口

带你轻松了解抽象类与接口

G13138200303的博客 2001

道路缺陷检测实战指南:基于YOLOv11的深度学习系统从搭建到落地

道路缺陷检测项目的每一步,都是“理论→实践→反思→优化”的成长循环。当你看到自己开发的系统能精准识别出道路上的每一处裂缝、每一个坑洼时,那种“技术解决真实问题”的成就感,会让你明白深度学习不止是论文里的公式,更是改变行业的工具。如果过程中遇到模型不收敛、界面功能异常等问题,不妨把问题拆解成“数据是否标注准确?”“模型参数是否合理?”“界面逻辑是否有漏洞?”等小问题逐一排查。记住,每解决一个问题,你就离“能独立落地AI项目的工程师”更近一步。

LXY_LOVE36的博客 171

java中抽象类和接口

当然有抽象类也有抽象方法,

有待提高 1159

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java中抽象类与接口详解

private我们已经知道,抽象类就是为了被继承,但是private修饰的并不支持继承,自然抽象类中也不能有private修饰了finalfinal修饰的类不支持继承,所以也不能与抽象类中abstract在一起使用static抽象方法不能用static修饰,static修饰的方法是类级别的方法,不是对象级别的方法.而抽象类使用来被继承的.首先抽象类是半抽象的,接口是完全抽象的,这也决定了他们的不同1.一个类可以实现(implements)多个接口,但是一个普通类只能继承(extends)一个抽象类。

qm_hu的博客 1497

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java接口和抽象类

Java中接口是很重要的

二哈喇子! 2665

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Java】抽象类和接口

本博客结合具体代码,带大家认识Java当中的抽象类和接口。

2401_88030885的博客 1329

Java 中什么时候用接口,什么时候用抽象类

一.java接口 1.接口的定义为的关键字为interface 2.接口中只能有方法和变量,变量为public static final类型,方法只能被可以为public(默认)和protected修饰,方法不能有具体的实现 3.一个类可以实现多个接口 4.一个类实现接口,必须要实现接口的所有的方法 二.抽象类 1.抽象类必须用 abstract修饰 2.如果一个类有abstract方法,这个类一...

不言尘世 6240

JAVA抽象类与接口

JAVA抽象类与接口 一、抽象类的概述 1、抽象类的引入: 以前学的猫狗案例,在父类中我们都给出具体的共性方法,但在实际情况中,每个子类对于共性方法的实现是不同的,这就引出了抽象类的概念。 抽象类即在继承条件下,父类中的共性功能,对于子类来说实现有差异,所以在父类中我们不必给出具体的实现,只需给出一个抽象的方法声明即可,实现交由子类自己重写,这个方法就叫抽象方法,而含有抽象方法的类就叫做抽象类。 2、抽象类与抽象方法格式: 抽象类:abstract class 类名 {} 抽象方法格

ZJMing_sir的博客 204

【JAVA】抽象类和接口

本文深入解析了Java中抽象类与接口的核心概念与应用。抽象类作为不完整的模板,允许定义抽象方法(必须被子类实现)和普通方法,但不能直接实例化;接口则是纯粹的行为规范,支持多重继承,所有方法默认抽象且公开。通过绘制图形、USB设备等实例,展示了二者在代码复用和解耦设计中的不同应用场景:抽象类适用于有部分共享实现的类层次结构,接口更适合定义跨类别的行为契约。文中还详细对比了两者的语法特性、使用限制及设计意图,帮助开发者精准选择这两种面向对象设计工具。

m0_68002296的博客 1177

Java的抽象类和接口

Java的抽象类和接口相关知识~

2301_80313139的博客 750

Java抽象类与接口

本文系统介绍了Java中抽象类和接口的核心概念与应用。抽象类通过abstract关键字定义,用于表示不完全具体的对象,包含抽象方法和具体方法,不能实例化但支持继承和多态。接口则定义行为规范标准,通过interface声明,包含抽象方法和常量,需要由实现类完成具体实现。二者关键区别在于:抽象类体现"is-a"关系,实现部分共性功能;接口体现"can-do"关系,定义纯粹的行为契约。文章通过USB设备等实例展示了接口的实际应用,并深入分析了抽象类在模板设计、多态实现等方面

2302_77623737的博客 730
上一篇: JVM的内存区域划分(Java中的数据存储等)
下一篇: Java内存分配即数据的存储
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值