【Java】接口和抽象类有什么共同点和区别?

news2024/11/15 8:43:59

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

【Java】接口和抽象类有什么共同点和区别?

  • 比较:接口和抽象类
    • 🚀共同点
    • 🚀区别


比较:接口和抽象类


🚀共同点

共同点

  1. 抽象性: 接口和抽象类都是用于表示抽象类型,不能被实例化,需要子类来实现或继承
  2. 包含抽象方法: 接口和抽象类都可以包含抽象方法 ,这些方法在子类中需要被具体实现。
  3. 支持多态: 通过接口或抽象类,可以实现多态性 ,即通过统一的接口或抽象类类型引用不同的实现类对象。
  4. 都可以有默认实现的方法: Java 8 可以用 default 关键字在接口中定义默认方法

在 Java 8 及以后的版本中,引入了默认方法(Default Methods) 的概念,允许在接口中使用 default 关键字为接口方法提供默认的实现。这样可以在不破坏现有代码的基础上向接口中添加新的方法,而不需要修改所有实现该接口的类。同样,抽象类也可以拥有具有默认实现的方法。

下面是一个简单的例子,演示了在接口和抽象类中使用 default 关键字声明默认实现的方法:

在这个例子中,MyInterface 接口和 MyAbstractClass 抽象类

都定义了一个抽象方法 abstractMethod 和一个默认方法 defaultMethod

然后,MyClass 类实现了这个接口并继承了抽象类,实现了抽象方法,并且可以选择是否重写默认方法。

main 方法中,创建了 MyClass 的实例,并调用了抽象方法和默认方法,展示了默认方法的使用。

// 接口
interface MyInterface {
    // 抽象方法
    void abstractMethod();

    // 默认方法
    default void defaultMethod() {
        System.out.println("This is a default implementation of MyInterface.");
    }
}

// 抽象类
abstract class MyAbstractClass {
    // 抽象方法
    abstract void abstractMethod();

    // 默认方法
    default void defaultMethod() {
        System.out.println("This is a default implementation of MyAbstractClass.");
    }
}

// 具体类实现接口和继承抽象类
class MyClass extends MyAbstractClass implements MyInterface {
    // 实现抽象方法
    @Override
    void abstractMethod() {
        System.out.println("This is the implementation of abstractMethod in MyClass.");
    }

    // MyClass 可以选择重写默认方法
    @Override
    public void defaultMethod() {
        System.out.println("This is a overridden default implementation in MyClass.");
    }
}

public class DefaultMethodExample {
    public static void main(String[] args) {
        // 创建 MyClass 实例
        MyClass myClass = new MyClass();

        // 调用抽象方法和默认方法
        myClass.abstractMethod();
        myClass.defaultMethod();
    }
}



🚀区别

区别

  1. 能否多继承: 一个类可以实现多个接口,但只能继承一个抽象类。
  2. 成员变量: 接口的成员变量只能是public static final修饰的常量,不能被修改且必须有初始值;抽象类可以包含实例变量,成员变量默认 default,可在子类中被重新定义,也可被重新赋值。
  3. 构造方法: 接口不能有构造方法;抽象类可以有构造方法,子类实例化时会调用父类的构造方法。
  4. 用途: 接口主要用于对类的行为进行约束(即定义规范),支持多继承,你实现了某个接口就具有了对应的行为,强调一种能力;抽象类主要用于建立类的层次结构以实现代码复用,强调的是所属关系。




在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1353264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作流入门这篇就够了!

总概 定义:工作流是在计算机支持下业务流程的自动或半自动化,其通过对流程进行描述以及按一定规则执行以完成相应工作。 应用:随着计算机技术的发展以及工业生产、办公自动化等领域的需求不断提升,面向事务审批、材料提交、业务…

力扣hot100 对称二叉树 递归 队列

👨‍🏫 题目地址 👨‍🏫 参考思路 递归的难点在于:找到可以递归的点 为什么很多人觉得递归一看就会,一写就废。 或者说是自己写无法写出来,关键就是你对递归理解的深不深。 对于此题&#xf…

day04 两两交换链表中的节点 删除链表的倒数第N个节点 链表相交 环形链表Ⅱ

题目1:24 两两交换链表中的节点 题目链接:24 两两交换链表中的节点 题意 两两交换链表中相邻的节点,返回交换后链表的头节点 虚拟头节点 注意终止条件,考虑节点的奇偶数,根据奇偶数确定终止条件 注意定义中间变量…

Amos各版本安装指南

Amos下载链接 https://pan.baidu.com/s/1uyblN8Q-knNKkqQVlNnXTw?pwd0531 1.鼠标右击【Amos28】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Amos28】。 2.打开解压后的文件夹,鼠标右击【Amos28】选择【以管理员身份运行…

干洗店洗鞋店小程序核心功能有哪些?

在繁忙的生活中,我们的鞋子常常承载着风尘仆仆的故事。而洗鞋小程序,就是那个让您的鞋子焕然一新的魔法师。通过这个小程序,您可以在线预约、支付,查询洗鞋订单,并与洗鞋店铺进行互动,轻松享受专业的洗鞋服…

计算机毕业设计 基于SpringBoot的工作量统计系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

计算机毕业设计------经贸车协小程序

项目介绍 本项目分为三种用户类型,分别是租赁者,车主,管理员用户; 管理员用户包含以下功能: 管理员登录,个人中心,租赁者管理,车主管理,赛事活动管理,车类别管理,租车管理,租车订单管理,车辆出售管理,购买订单管理,…

数据结构第2章 栈和队列

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、思维导图栈和队列1、栈1)特点2&#xff0…

计算机网络【Cookie和session机制】

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Sess…

Springboot集成RabbitMq二

接上一篇:Springboot集成RabbitMq一-CSDN博客 1、搭建项目-消费者 与之前一样 2、创建配置类 package com.wym.rabbitmqconsumer.utils;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.spring…

RabbitMQ集群的简单说明

1.普通集群(副本集群) 当集群中某一时刻master主节点宕机,可以对master中Queue中的消息进行备份。而就算master宕机了,从节点不会对外提供服务,等到master节点恢复后,系统才会恢复正常。 主从架构的缺点是队列中的消息只是位于主节…

流量预测资源总结(不断更新)

目录 整理流量预测数据集(1)Telecom Italia 意大利电信 2015(2)City Cellular Traffic Map (C2TM) 2015(3)、LTE Network Traffic Data_kaggle(4)、Cellular Traffic Analysis Data …

ROS学习笔记(8)进一步深入了解ROS第二步

0.前提 在上一讲中我提到过该系列是基于宾夕法尼亚大学工程学院的ROS公开课,系列文章将来源于公开课中的课后习题。该系列可以很好的帮助大家更加深入的了解ROS的一些概念。(有效面对HR的提问。) 1. (C)What is a nodehandle object? Can we…

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致

Solmash 是 Solana 生态中由社区主导的铭文资产 LaunchPad 平台,该平台旨在为 Solana 原生铭文项目,以及通过其合作伙伴 SoBit 跨链桥桥接到 Solana 的 Bitcoin 生态铭文项目提供更广泛的启动机会。有了 Solmash,将会有更多的 Solana 生态的铭…

OpenCV中实现图像旋转的方法

OpenCV中实现图像旋转的方法 函数:cv2.flip() 功能:水平或者垂直翻转 格式:dst cv2.flip(src,flipCode[,dst]) 参数说明: src:输入图像 dst:和原图像具有相同大小、类型的目标图像。 flipCode&#…

Docker中的核心概念

1.镜像 Image 一个镜像就代表一个软件。mysql镜像、redis镜像、mq镜像 2.容器 Container 一个镜像运行一次就会生成一个容器,容器就是一个运行的软件服务。 3.远程仓库 Repository 远程仓库用来存储所有软件的镜像,Docker Hub 4.本地仓库 用来存储…

对偶问题的基本性质

写于:2024年1月3日晚 修改于: 原规划与对偶规划 原规划对偶规划 max ⁡ z C T X s.t. { A X ≤ b , 其中 X ( m ∗ 1 ) X ≥ 0 \begin{aligned} & \max \mathrm{z}\mathbf{C}^T \mathbf{X} \\ & \text { s.t. }\left\{\begin{array}{l}\mat…

教育机构培训系统小程序功能清单

制作一款适合自己的教育机构培训系统小程序,可以为学员提供更便捷的学习体验,同时提高机构的教学效率。今天将详细介绍如何使用乔拓云平台制作教育机构培训系统小程序。 在浏览器搜索乔拓云,登录到后台,选择教育系统并点击进入。在…

【复盘】2023年终总结

大家好,我是qxlx 2023年马上就要结束了,在此周末空闲时间进行整体复盘一下2023年关于自己的生活、工作、学习进度,以此进行记录。 01 工作 粗略算起来,来北京已经3年之久,那时候还是一个懵懵懂懂的学生,…

计算机毕业设计——基于SSM+Layui的图书管理系统(附源码)

1,项目背景 国家大力推进信息化建设的大背景下,城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区,商业和服务业也比较发达,公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息…