首页 > 编程语言 >Java学习打卡-Day8

Java学习打卡-Day8

时间:2024-12-10 19:30:41浏览次数:11  
标签:Java Day8 实现 接口 默认 打卡 方法 抽象类

抽象类与接口

抽象方法

  • 只有声明,没有具体的实现。
  • 必须用 abstract 关键字进行修饰。
  • 抽象方法必须为 public 或者 protected(因为如果为 private,则不能被子类继承,子类便无法实现该方法),默认情况下为 public。

抽象类

  • 包含抽象方法的类。
  • 只是用 abstract 修饰的话也是抽象类。
  • 可以拥有成员变量和普通的成员方法。
  • 抽象类不能用来创建对象。
  • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为 abstract 类。

接口

  • 接口中的变量会被隐式指定为 public static final 变量(只能是),不能被修改且必须有初始值。
  • 接口中的方法会被隐式指定为 public abstract 方法。在 Java 8 及以上版本中,接口引入了新的方法类型:default 方法、static 方法和 private 方法。
  • 如果一个非抽象类实现了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。

区别

  • 抽象类中成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
  • 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract方法。
  • 抽象类可以有静态代码块和静态方法,接口中不能含有静态代码块以及静态方法。
  • 一个类只能继承一个抽象类,却可以实现多个接口。

抽象类是对一种事物的抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将“飞行”这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将“飞行”设计为一个接口Fly,包含方法fly(),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。从这里可以看出,继承是一个 "是不是"的关系,而接口实现则是"有没有"的关系。

  • ***对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。 ***

接口新的方法类型

默认方法(Default Methods)

  • 在 Java 8 之前,接口中的所有方法都是抽象的,必须由实现接口的类提供具体实现。然而,有时需要在接口中添加新的方法,但这将破坏现有的实现,因为所有实现该接口的类都需要提供新方法的具体实现。为了解决这个问题,Java 8引入了默认方法。
  • 默认方法是接口中带有具体实现的方法,使用 default 关键字修饰。它们允许在接口中提供方法的默认行为,从而可以在不破坏现有实现的情况下向接口添加新方法

默认方法可以被接口的实现类直接调用,也可以被接口中的其他默认方法调用。
如果实现类提供了与默认方法具有相同签名的方法,则实现类的方法将覆盖接口的默认方法。
默认方法可以调用接口中的其他默认方法或静态方法,但不能直接访问接口的实例变量(因为接口没有实例变量)。

  • 默认方法冲突
    • 考虑两个包含了同一个方法的接口,如果有一个类同时实现了这两个接口会怎么样呢?Java 编译器会报告这个错误(两个接口如何冲突不重要,至少有一个接口提供了一个默认实现,编译器就会报错),只需在类中覆盖重写这一方法,选择两个冲突方法中的一个。
    • 另一种情况,一个类拓展了一个超类,同时实现了一个接口,并从超类和接口继承了相同的方法。这种情况下只会考虑超类方法,接口的所有默认方法都会被忽略。这正是“类优先”原则。

静态方法(Static Methods)

  • 有时候,我们需要在接口中提供一些与接口本身相关的工具方法,而不是与接口的实例相关的方法。为了支持这种需求,Java 8引入了接口中的静态方法。
  • static 方法无法在实现类中被覆盖,只能通过接口名直接调用,类似于类中的静态方法。static 方法通常用于定义一些通用的、与接口相关的工具方法,一般很少用。

私有方法(Private Methods)

  • 在Java 9之前,接口中的所有方法都是public和abstract的(除了Java 8 引入的默认方法和静态方法,它们默认是public的)。然而,有时候我们需要在接口中定义一些辅助方法,这些方法不应该被接口的实现类或外部类直接访问。为了支持这种需求,Java 9引入了接口中的私有方法。
  • 私有方法是接口中使用 private 关键字修饰的方法。它们可以是静态的,也可以是实例的。

私有方法只能被接口中的其他方法(包括默认方法和静态方法)调用。
它们不能被接口的实现类或外部类直接调用。
私有方法提高了接口的封装性,允许在接口内部实现复用逻辑而不暴露给实现类。

标签:Java,Day8,实现,接口,默认,打卡,方法,抽象类
From: https://blog.csdn.net/SLFG_Ts/article/details/144368656

相关文章

  • 太卷了,阿里一面试官把多年总结的Java八股文完全开源了.......
    Java越来越卷了,都快卷成韭菜花了,最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,索性,前一阵子偶然得到一份阿里面试官整理的Java八股文,答案都整理好,整理的《互联网大厂Java八股文》共计12万字!大家一起学习,卷起来!这套八股文资料,包括Java集合、JVM、多线程、并发编程......
  • 冲刺金三银四!GitHub中文社区高热度的Java面试题被我整理好了!
     面对已经过去的金九银十很多小伙伴都受到了很大的挫折!最近收到一个小伙伴金九银十在阿里的面试流程完全被吊打,和我一起看看阿里都问了什么吧!添加图片注释,不超过140字(可选)小编在这里也简单的看了一下牛客网阿里招聘的一些评价,难度指数普遍在四星以上!!!!添加图片注......
  • JAVA中的枚举
    枚举的声明-使用enum关键字来定义一个枚举类型,它包含常量、方法和构造函数        -枚举类的第一行必须是枚举项                -仅有枚举项时可以不加";"        -构造函数是私有的,因为枚举的实例是由JVM控制的publicenumDay{......
  • java根据一个远程地址将文件下载到本地
    privatevoidreadFile(StringdocId,Stringtoken,StringproductResource,StringdocUrl){Stringurl=thirdConfig.getAttachmentUrl()+docId;//下载资源BufferedInputStreambis=null;BufferedOutputStreambos=null;......
  • 基于java的公寓报修管理系统论文
    系统简介现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处......
  • springboot基于java的教学辅助平台论文
    系统简介随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教学辅助平台的开发全过程。通过分析教学辅助平台管理的不足,创建了一个计算机管理教学辅助平台的方案。文章介绍了教学辅助平台的系统分析部分,包括可行性分析等,系统设......
  • springboot基于java的火车票订票系统的设计与实现论文
    系统简介传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装火车票订票系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,火车票订票系......
  • node.js毕设基于java的五金批发商场业务管理系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于五金批发商场业务管理系统的研究,现有研究主要以传统的管理模式为主,专门针对基于Java开发的五金批发商场业务管理系统的研究较少。在国内外,一些大型......
  • 目前Java后端就业前景到底怎么样?
    很多人都说今年对于IT行业根本没有所谓的“金三银四”“金九银十”。在各大招聘网站或者软件上不管是大厂还是中小公司大多都是挂个招聘需求,实际并不招人;在行业内的程序员基本都已经感受到了任老前段时间口中所谓的“寒气”。虽然事实确实是如此,但你细心观察之后就会发现,圈子......
  • node.js毕设基于java的招聘信息管理系统 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于招聘信息管理系统的研究,现有研究主要以通用性的招聘系统为主,专门针对校园环境下结合企业、学生、教师等多角色的基于Java的招聘信息管理系统的研究......