(搬运 )Java抽象类与接口的区别

【JAVA基础知识】-过往笔记搬运存档 大一的笔记,当时是记在word里的,给搬过来了 阅读详情

本文由 ImportNew - jessenpan 翻译自 javacodegeeks。
http://www.importnew.com/12399.html

抽象类

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

被abstract修饰的类叫抽象类,抽象类中,可以含有抽象方法,也可以不含有抽象方法
抽象方法无法被实例化
抽象类中的抽象方法,默认权限是public
抽象方法是没有方法体的
抽象类中可以被抽象类继承,不必重写父类的抽象方法
非抽象类在继承抽象类后,必须实现父类的抽象方法
抽象类中,可以有成员变量
抽象关键字abstract不能与private,final,static关键字组合使用
抽象方法,必须在抽象类中

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方法的实现:

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接口为例:

public interface Externalizable extends Serializable {

    void writeExternal(ObjectOutput out) throws IOException;

    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

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

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);
    }
}
抽象类和接口的对比

这里写图片描述

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

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

OBS技术深度剖析:从开源直播工具到专业制作引擎的进化之路 本文深入剖析了开源直播软件OBS的技术架构与发展历程。从2012年诞生至今,OBS已成长为直播领域的事实标准,其成功源于模块化设计和开源协作模式。文章详细解析了OBS的核心技术:1) 分层架构与插件系统,2) GPU加速的渲染管线,3) 智能音频处理,4) 多平台编码优化。同时探讨了虚拟摄像头、浏览器源等高级功能的实现原理,并提供了性能优化方案和硬件配置建议。随着AI、WebRTC等新技术发展,OBS将持续引领实时内容创作工具的创新,为开发者和创作者提供更强大的技术支持。 阅读详情

相关推荐

Super4PCS文章阅读笔记

Super4PCS阅读笔记 Super4PCS阅读笔记 前言 前言 今天给大家分享一下点云配准四点法4PCS0的变种——Super4PCS。此算法的原文在:Super4PCS: Fast Global Pointcloud Registration via Smart Indexing。稍微我也会写一篇关于如何使用这篇文章的里所提供的代码进行点云粗配准。关于四点法...

Vodake的博客 4540

Java抽象类和接口

我们来聊聊抽象类和接口吧,复习和总结一下。 抽象类 类是具有相同功能和属性的对象的集合,而抽象类是对类的高度抽象,在类层次中处于上层,位于上层的类更具有通用性。 抽象类用abstract关键字修饰。通俗得讲,含有抽象方法的类就是抽象类。但是,一个类即使没有抽象方法也是可以声明为抽象类的,如果你不想让这个类创建实例的话。 抽象类的一些特性: 抽象类有构造方法,但不可以被实例化。构造方法是子类用来初...

machine_Heaven的博客 463

华三模拟器实战:IPSec VPN穿越NAT的完整配置与调试(附常见问题排查)

本文详细解析了华三模拟器中IPSec VPN穿越NAT的完整配置与调试方法,包括基础环境准备、分步配置、ACL协调策略及高级故障排查。通过实战案例和关键参数解析,帮助网络工程师解决IPSec与NAT协同工作的典型问题,提升企业网络安全性。

weixin_33724046的博客 462

抽象类,内部类,接口

java后端菜鸟的不自量力历程 文章目录)基础知识前言这是很基础的且做的不好的小笔记一、接口二、内部类三、抽象类四、抽象类和接口类的异同总结插入链接与图片 目录)基础知识 前言这是很基础的且做的不好的小笔记 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、接口 接口的使用 1、接口使用interface来定义,Java中接口和类是并列结构

qq_45704633的博客 410

SpringBoot3 + Vben5.0实战:从零搭建企业级管理后台(附完整代码)

本文详细介绍了如何从零开始,使用SpringBoot3与Vben5.0技术栈搭建现代化企业级管理后台。通过对比分析,阐述了该组合在开发效率、性能(如虚拟线程)和权限模型(RBAC)方面的优势,并提供了从项目初始化、核心功能开发到部署运维的完整实战指南,帮助开发者快速构建高性能、易维护的后台系统。

weixin_29306317的博客 172

CTP开发实战:如何高效处理预埋单与委托单的完整流程(附代码示例)

本文深入探讨了CTP开发中预埋单与委托单的完整处理流程,从订单生命周期理解、核心代码实现到异步事件处理与系统健壮性构建。通过详细的代码示例和状态机分析,为开发者提供了构建高可靠订单处理系统的实战指南,重点解决了状态同步、异常恢复等关键工程挑战。

weixin_29234239的博客 118

黑马Java第十一讲笔记—多态&抽象类&接口

黑马Java第十一讲笔记—多态&抽象类&接口

旺仔爱编程 1146

让 Workflow 听懂 ABAP OO 事件:从定义到触发的全流程实战

摘要 本文介绍了如何利用ABAP面向对象事件触发SAP业务流程工作流。相比传统BOR事件方式,ABAP OO事件提供了更清晰的实现路径:在业务类上定义公共事件,通过SWDD工作流构建器将事件设为启动条件,最后使用CL_SWF_EVT_EVENT类在代码中抛出事件。文章详细说明了事件定义、参数传递、工作流绑定等关键步骤,并强调COMMIT提交的必要性。这种事件驱动方式特别适合异步场景,如后台更新后触发后续流程,使整个业务流程更加灵活高效。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 395

接口与抽象类:构建灵活软件架构的双子星

2003年,某跨国银行的支付系统在进行跨境汇款功能升级时,开发团队发现原本简单的费率计算功能竟然需要修改17个类文件。这个真实的案例暴露出刚性代码结构的致命缺陷——这就是业界闻名的"蝴蝶效应"代码问题。当系统复杂度超过临界点时,任何微小改动都可能引发连锁反应。正是这样的现实挑战,催生了面向对象设计中两个至关重要的概念:接口(Interface)和抽象类(Abstract Class)。它们如同建筑师的蓝图为软件系统搭建起灵活可扩展的骨架。理解它们的本质区别和应用场景是从代码搬运工蜕变为架构设计师的关键转折点

阿新的博客 886

大疆司空 2 私有化部署:FH2、Terra、4G 三大服务区别详解

摘要: 司空2私有版包含三大模块:FH2(核心平台,必选)、Terra(建模算力,需NVIDIA显卡)、4G(内网图传)。FH2是基础,支持设备管理与任务调度;Terra适用于测绘建模场景,依赖GPU算力;4G模块保障复杂环境下的图传稳定性,适合纯内网部署。选择逻辑:先部署FH2,再按需添加Terra(需显卡)或4G(需内网支持),避免资源浪费。

2501_93651177的博客 580

【知识分享】车载以太网PCB布局设计指南

本文将深入探讨在设计车载以太网设备的印刷电路板(PCB)时需要着重考虑的若干关键主题。这些主题广泛涵盖了数据布线设计,以确保其符合信号完整性(SI)和电磁兼容性(EMC)标准;外部元器件的合理摆放;以及采取有效的抗电磁干扰(EMI)布局策略等方面。通过全面且细致地处理这些关键环节,能够显著提升车载以太网设备的性能与可靠性。

一只豌豆象的博客 1353

JAVA基础06—接口与多态

本文介绍了接口与多态,搬运部分十分专业的概念解释,结合个人学习过程中做的笔记,供读者参考。

程序员Sharry的博客 700

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java 接口 默认行为_java 8 接口默认方法

解决问题:在java8 之前的版本,在修改已有的接口的时候,需要修改实现该接口的实现类。作用:解决接口的修改与现有的实现不兼容的问题。在不影响原有实现类的结构下修改新的功能方法案例:首先定义一个接口DefaultMethodInterface,该接口中定义了静态变量/接口方法/无返回值的默认方法/静态的默认方法/,在java8之前的版本是无法定义默认的方法。package com.ven.java...

weixin_42502537的博客 153

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java中抽象类于接口解析

原文链接:http://www.cnblogs.com/beanmoon/archive/2012/12/06/2805221.html  我们不生产知识,我们只是互联网的搬运工  0_0 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interf

qq_35562816的博客 254

java8接口默认方法

解决问题:在java8 之前的版本,在修改已有的接口的时候,需要修改实现该接口的实现类。 作用:解决接口的修改与现有的实现不兼容的问题。在不影响原有实现类的结构下修改新的功能方法 案例: 首先定义一个接口DefaultMethodInterface,该接口中定义了静态变量/接口方法/无返回值的默认方法/静态的默认方法/,在java8之前的版本是无法定义默认的方法。 package com.

乐于学习、乐于分享、乐于总结 838

java 8 接口默认方法

解决问题:在java8 之前的版本,在修改已有的接口的时候,需要修改实现该接口的实现类。 作用:解决接口的修改与现有的实现不兼容的问题。在不影响原有实现类的结构下修改新的功能方法 案例: 首先定义一个接口DefaultMethodInterface,该接口中定义了静态变量/接口方法/无返回值的默认方法/静态的默认方法/,在java8之前的版本是无法定义默认的方法。 package com.ven.

My Blog 298

java学习分享

本文是为了秋招准备,主要以点和面的形式进行复习。(小知识用点,多一点的将以面的形式展示)。

qq_36309174的博客 1273

java基础(超赞!!!)

我是技术搬运工,好东西当然要和大家分享啦原文地址关键字1. final数据声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。对于基本类型,final 使数值不变;对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。方法声明方法不能被子类覆盖。private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 p...

FanceFu的博客 907

java面试常见问题<跟随自己记录中...>【基础、集合、框架、一点前端、一点Linux】

float。

qq_53195744的博客 953

俺就是面试题的搬运工⑤

21、写clone()方法时,通常都有一行代码,是什么? clone有缺省行为,super.clone(); 因为首先要把父类中的成员复制到位,然后在复制自己的成员 22、面向对象的特征有哪些方面 封装:把对同一事物进行操作的方法和相关的方法和数据放在同一个类中,实现高内聚低耦合 继承:在定义和实现一个类的时候,可以在一个已经存在的的类的基础上进行:提高代码的复用性和扩展性 抽象:找到一些事物之间的相似和共性之处:抽象类的意义就是为了被继承 多态:父类引用指向子类对象 23、java中实

qq_41456369的博客 179

《隔离十四天》系列 -第十一天 -Java面试题大全

前言 今天又是朝气蓬勃的一天,虽然还没找到合适的工作,但是也不能丧失了对生活的信心,还是要勇敢的面对生活,比如我们说一句,奥里给!!! 当然了每日膜拜大佬的节奏不能断了,还是要在网上多跟各位大佬学习,学习技术,提高自己。 好了,言归正传,今天依然是看面试题的一天,当然也学习了基础薄弱的数据结构,果真发觉自己啥都不懂,不配说自己是软件工程出身的。 这些面试题是自己在网上看面试题的时候看到觉得自己...

qq_40126996的博客 267

后台开发常问面试题集锦(问题搬运工,文末附问题链接)

Java基础问题 String的'+'的性能及原理 java之yield(),sleep(),wait()区别详解-备忘笔记 深入理解Java Stream流水线 抽象 & abstract关键字 Java final 修饰符知识点总结(必看篇) Java中的static关键字解析 Java 回调机制解读 Java抽象类与oop三大特征 Java时间和时间戳的相互转换...

小码农 TT 1031

Java基础 —— 面向对象

java基础之面向对象

小熊的学习记录 1022

Java面试基础(会持续更新)

Java基础面试题

weixin_43082579的博客 225

Java 基础 - 搬运其它网址

https://blog.youkuaiyun.com/qq_33324995/article/details/121436159(实例代码)https://blog.youkuaiyun.com/andrew_dear/article/details/123037531(所有队列)

qq_45157176的博客 454
上一篇: Java 代理机制
下一篇: Java final 和 static 关键字
Yonghua Li
博客等级 码龄10年 38粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值