Java抽象类与接口的区别

java中抽象类和接口的区别 https://blog.youkuaiyun.com/ooppookid/article/details/51173179 1、接口和抽象类有什么区别 在Java语言中,抽象类abstract class和接口interface是抽象定义的两种机制。 正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。抽象类abstract class和接口interface在对于抽象定义方面具有很大的相似性,甚... 阅读详情

  很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。

  在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。

  抽象类

  抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例:

1
2
3
4
5
6
7
8
9
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
    // abstract method
    abstract void service(ServletRequest req, ServletResponse res);
 
    void init() {
        // Its implementation
    }
    // other method related to Servlet
}

  当HttpServlet类继承GenericServlet时,它提供了service方法的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class HttpServlet extends GenericServlet {
    void service(ServletRequest req, ServletResponse res) {
        // implementation
    }
 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        // Implementation
    }
 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        // Implementation
    }
 
    // some other methods related to HttpServlet
}

  接口

  接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable接口为例:

1
2
3
4
5
6
public interface Externalizable extends Serializable {
 
    void writeExternal(ObjectOutput out) throws IOException;
 
    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

  当你实现这个接口时,你就需要实现上面的两个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Employee implements Externalizable {
 
    int employeeId;
    String employeeName;
 
    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        employeeId = in.readInt();
        employeeName = (String) in.readObject();
 
    }
 
    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
 
        out.writeInt(employeeId);
        out.writeObject(employeeName);
    }
}

  抽象类和接口的对比

参数 抽象类 接口
默认的方法实现 它可以有默认的方法实现 接口完全是抽象的。它根本不存在方法的实现
实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有public、protected和default这些修饰符 接口方法默认修饰符是public。你不可以使用其它修饰符。
main方法 抽象方法可以有main方法并且我们可以运行它 接口没有main方法,因此我们不能运行它。
多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口
速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。

  什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

  Java8中的默认方法和静态方法

  Oracle已经开始尝试向接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异。现在,我们可以为接口提供默认实现的方法了并且不用强制子类来实现它。这类内容我将在下篇博客进行阐述。

详解Σ-Δ型ADC拓扑结构的基本原理 现在,总环路滤波器的H(f)具有更大的滚降,Mod 2型的噪声传递函数具有40 dB/十倍频程的上升速率。同样,当正弦波输入为负满量程时,+1和–1之间的转换会减少,输出以–1为主。噪声传递函数是一个高通滤波器函数,提供噪声整形,在DC附近的较低频率,对量化噪声有很强的抑制。H(f)是环路滤波器的函数,定义噪声和信号的传递函数。Σ-Δ型ADC的噪底由热噪声决定,而不受量化噪声的限制。量化噪声为量化器的输入与输出之差。图5. Mod 1 Σ-Δ环路的线性模型(b),包括方程、滤波器、信号和噪声传递函数图。 阅读详情

相关推荐

GD32测量pwm波频率以及占空比

1、需求 最近做的一个项目,其中有一个传感器输出是pwm波形,频率代表速度,频率越高速度越快。不同的占空比代表不同的故障类型。占空比10%~90%,频率范围20hz ~1khz。 基于以上的需求,单片机要实现两个功能: 1、测量频率 2、测量占空比 这怎么玩呢?从没搞过啊。 2、需求分析 经过查找资料以及参考正点原子的教程,发现单片机的定时器的输入捕获功能能够实现该功能。 2.1分析 如上图所示,测量占空比和测量频率实际上就是测量波形的长度。 对于占空比,就是测量T2与T1时刻的差值 对于频率,就是测量T

Jack Yi的博客 9070

Java抽象类和接口的详细区别(全)

这两者经常在笔试以及面试中经常问及,甚至在项目实战中还在纠结用哪一种类型今天就此问题详细剖析一下以往我的文章中也有稍微提及:java框架零基础从入门到精通的学习路线(超全)此处将其这些文章抽离公共部分,详细总结下这两概念此处的总结偏向于两者概念的总结,将其制作成表格抽象类是半抽象的,有构造方法,只允许出现常量和抽象方法。类和类之间只能单继承,一个抽象类只能继承一个类(单继承)。接口是完全抽象的,没有构造方法,接口和接口之间支持多继承,一个类可以同时实现多个接口比较内容抽象类。

码农研究僧的博客 2万+

国产Flash替代方案:手把手教你用XSCT烧写ZYNQ7045的BOOT.BIN(附完整命令解析)

本文详细介绍了国产Flash替代方案在ZYNQ7045上的应用,通过XSCT工具链实现BOOT.BIN的精准烧写。内容涵盖国产Flash兼容性检查、PetaLinux环境搭建、XSCT烧写全流程及故障排查,帮助开发者高效完成国产化替代,提升硬件开发效率。

weixin_33670786的博客 427

java接口、接口方法、接口属性 的修饰符详解

java接口的修饰符:abstract(默认不写。interface本身就是抽象的,加不加abstract都一样) 接口中字段的修饰符:public static final(默认不写)   解释如下: public: 使接口的实现类可以使用该常量; static:接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态变量。        ...

Cheung's house 2万+

用朴素贝叶斯分类模型判断病人是否感染幽门螺杆菌(Python实现)

朴素贝叶斯,Python

weixin_56529327的博客 1160

线性分类器(Linear Classifier)

线性分类器 如上图所示,这是二维空间中的一个数据集,如果他正好能够被一条直线分成两类,那么我们称它为线性可分数据集,这条直线就是一个线性分类器。 在三维空间中,如果数据集线性可分,是指能够被一个平面分为两类。 在一维空间中,所有的点都在一条直线上,如果线性可分。可以理解为它们能够被一个点分开。 这里的直线、平面、点被分为决策边界。 一个 m 维空间中的数据集,如果能够被一个超平面一分为二,那么这个数据集就是线性可分的,这个超平面就是决策边界。 例如,这是二维平面上的一条直线, 它可以把平面切分成两

xuechanba的博客 1万+

Java中抽象类和接口的区别,一文弄懂,图文并茂

Java是一种面向对象的编程语言,Java中的抽象类和接口是两种常见的抽象概念,它们都能够帮助我们实现抽象化和多态性,但是它们在一些细节上有所不同。本文将详细介绍Java中抽象类和接口的定义、区别和使用,并提供相应的代码示例。抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类具有类的所有特性,包括成员变量、成员方法、构造方法等,但是其中的某些方法是抽象的,需要在具体的子类中实现。抽象方法没有方法体,只有方法签名,用abstract关键字修饰。

向诸位大佬虚心学习 7151

手把手教你学simulink实例--基于Simulink的航空发动机控制系统设计与仿真

航空发动机是飞机的核心动力装置,其性能直接影响飞行器的安全性、经济性和可靠性。现代航空发动机控制系统需要具备高精度、快速响应和强鲁棒性的特点,以适应复杂的飞行环境和任务需求。本项目旨在使用MATLAB/Simulink平台,设计并实现一种适用于涡扇发动机的闭环控制系统,通过调节燃油流量、压气机叶片角度等控制变量,确保发动机在不同工况下稳定运行,并满足推力需求。

MHD0815的博客 275

java-抽象类和接口的区别

抽象类和接口的区别是什么一、区别1、抽象类要被子类继承,接口要被类实现。2、接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。4、接口是设计的结果,抽象类是重构的结果。5、抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。6、抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。7、抽象类主要用来抽象类别,接口主要用来抽象功能。 一、区别 1、抽象类要被子类继承,接口要被类实现。 2、接口只能做方法声明,抽

weixin_43846708的博客 4753

MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

激光雷达传感器和相机通常在自动驾驶应用中结合使用,因为激光雷达传感器收集三维空间信息,而相机则以二维图像捕捉空间的外观和纹理。您可以融合来自这些传感器的数据来改进物体检测和分类。激光雷达-相机标定可以估算出一个变换矩阵,给出两个传感器之间的相对旋转和平移。在进行激光雷达-相机数据融合时,您可以使用该矩阵。本图说明了激光雷达和相机标定 (LCC) 过程的工作流程,我们使用棋盘格作为标定对象。我们从激光雷达和相机数据中提取棋盘角和平面,然后在它们的坐标系之间建立几何关系,进行标定。

机器人控制与仿真应用 7371

063、推挽变换器的磁偏问题与解决

本文针对推挽变换器中的磁偏问题展开分析。作者通过实际案例指出,磁偏主要由开关管导通压降差异和驱动信号不对称引起,会导致变压器饱和、MOS管炸毁等问题。文章提供了四种解决方案:采用电流模式控制、添加隔直电容、优化对称驱动设计以及引入磁芯气隙(作为最后手段)。调试时应重点观察原边电流波形对称性、变压器声音和直流分量。作者强调实践经验的重要性,建议预留隔直电容位置,并指出推挽拓扑在500W以上功率场合的局限性。这些基于实战的经验总结为电源工程师提供了有价值的参考。

Jack010169的博客 312

java提高篇(四)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。 一、抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果...

chenssy 的技术博客 2001

定位教程0---定位初介绍

定位教程0---定位算子介绍

Quintin 1万+

Java中抽象类与接口有什么区别

理解抽象 abstract class和interface是Java中对于抽象类定义两种机制,正是由于这两种机制的存在,才赋予Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有相当大的相似性,设置可以互相替换,因此在进行抽象类定义时显得比较随意。 其实,两者还是由差别的,对于他们的选择设置反映出对于问题空余本质的理解,对于涉及意图的理...

xiaoxu9522的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java中接口和抽象类的区别

金三银四马上就到了,希望大家能好好学习一下这些技术点学习视频:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!面试真题:[外链图片转存中…(img-y4cDQOKR-1711982952870)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

WJud11的博客 671

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java中抽象类和接口的区别

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

2401_84003630的博客 922

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java中抽象类跟接口的区别

Java中抽象类和接口的区别 抽象类: 含有abstract修饰符的class 即为抽象类, abstract类不能创建实例对象, 含有abstract的方法的类必须定义为abstract class , abstract class 里的方法不必是抽象的, 抽象来中定义抽象方法必须放在具体子类中实现,所以,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有方法,那

Super的专栏 1209

java基础之接口与抽象类的区别

java基础之接口与抽象类的区别         抽象类,包含一个抽象方法的类就是抽象类。什么是抽象方法呢?声明而未被实现的方法,抽象方法必须用abstract关键字,抽象类不能直接实例化,都是通过它的子类,即继承抽象类的类来实例化的,而且子类必须重写抽象类中的所有抽象方法。         接口,接口的关键字是interface,接口中的成员变量必须是静态的,而且必须是被初始化的,接口中的方

程序员成长指北 2905

java接口与抽象类区别

很久没有看到如此精辟的文章了!作者写得实在太好了!正在学JAVA或者想了解抽象类与接口的朋友,绝对不可错过!本人极力推荐! OOP中接口与抽象类的区别 Java语言接口与继承的本质 深入理解接口和抽象类   OOP中接口与抽象类的区别 OOP中的INTERFACE和ABSTRACT CLASS是两个不同的概念 我们在使用的时候往往将两个混在一起使用,不做什么区别,大家可能在定义上对

2644

Java的接口和抽象类区别

一、抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstract void fun(); 抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 下面要注意一个问题:在《J...

孤独没有颜色 169

Java抽象类和接口的区别

抽象类接口核心目的:构建类层次结构核心目的:定义行为标准关键优势:代码复用 + 状态封装关键优势:灵活性 + 解耦典型场景Animal→DogCat典型场景RunnableCloneable💡经验法则优先用接口(更灵活、解耦、易扩展)当需要共享代码或状态时,改用抽象类Java 8 后两者功能趋近,但设计思想不变。

走过冬季 673

Java总结:抽象类、接口以及抽象类和接口的区别

Java中抽象类和接口的区别会是很多公司的必问面试题之一,我们必须牢牢掌握。

鄙人kunzhi96,感恩遇见! 864
上一篇: 锚点链接
下一篇: CSS字体大小: em与px、pt、百分比之间的对比
HackProgramer
博客等级 码龄12年 255粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值