前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Java】接口和抽象类有什么共同点和区别?

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

作者头像
.29.
发布于 2024-01-04 00:09:32
发布于 2024-01-04 00:09:32
18400
代码可运行
举报
文章被收录于专栏:个人技术博客个人技术博客
运行总次数:0
代码可运行

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

【Java】接口和抽象类有什么共同点和区别?
  • 比较:接口和抽象类
    • 🚀共同点
    • 🚀区别

比较:接口和抽象类

🚀共同点

共同点

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

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

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

在这个例子中,MyInterface 接口和 MyAbstractClass 抽象类 都定义了一个抽象方法 abstractMethod 和一个默认方法 defaultMethod。 然后,MyClass 类实现了这个接口并继承了抽象类,实现了抽象方法,并且可以选择是否重写默认方法。 在 main 方法中,创建了 MyClass 的实例,并调用了抽象方法和默认方法,展示了默认方法的使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 接口
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. 用途: 接口主要用于对类的行为进行约束(即定义规范),支持多继承,你实现了某个接口就具有了对应的行为,强调一种能力;抽象类主要用于建立类的层次结构以实现代码复用,强调的是所属关系。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
字节后端面试题:接口和抽象类的区别?抽象类可以多继承吗?
接口是一种抽象类型,它定义了一组方法的签名但没有实现。在Java中,接口可以包含常量、方法声明、默认方法、静态方法和嵌套类型。接口通过 interface 关键字声明。
GeekLiHua
2025/01/21
890
字节后端面试题:接口和抽象类的区别?抽象类可以多继承吗?
面向对象编程:深入理解Java接口
接口在Java开发中扮演着重要的角色,它为类之间的交互定义了标准和规范。本文将深入探讨Java接口的定义方法、成员组成、实现方式以及接口与多态的关系,并介绍Java 8及以后版本中的新特性。
IT_陈寒
2023/12/13
3820
Java抽象类与接口详解
抽象类是一个包含抽象方法的类,它不能被实例化。抽象方法是一种没有方法体的方法,它只包含方法的签名。抽象类可以包含普通的方法,也可以包含抽象方法,而普通方法可以有方法体。
GeekLiHua
2025/01/21
1100
【IT领域新生必看】编程世界中的秘密武器:深入解读抽象类与接口的区别
在面向对象编程(OOP)中,抽象类和接口是两个非常重要的概念,它们为我们提供了定义和设计程序结构的强大工具。尽管它们有许多相似之处,但在实际应用中,它们各自有不同的特点和用途。对于编程初学者来说,理解这两者的区别和如何在实际项目中使用它们至关重要。在这篇文章中,我们将深入探讨抽象类和接口的区别,帮助你掌握这两种编程武器,让你的代码更灵活、更易维护。
E绵绵
2024/07/12
1190
Java-抽象与接口
Animal仅是一种会吃会睡的对象,再无其他行为,不够具体,不够完整。 程序是用来模拟现实世界、解决现实问题的。现实世界中存在的都是“动物”具体的子类对象,并不存在“动物”对象。 所以,Animal不应该被独立创建成对象。 如何限制这种对象的创建呢?便引入了抽象类的概念。
WuShF
2023/07/08
2070
Java-抽象与接口
【面试题精讲】接口和抽象类有什么共同点和区别?
接口是一种定义了一组方法签名的集合,这些方法可以被实现该接口的任何类所实现。接口中的方法默认都是公共的抽象方法,不包含具体的实现代码。
程序员朱永胜
2023/10/07
1.2K0
Java基础系列4:抽象类与接口的前世今生
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。
说故事的五公子
2019/11/13
4950
Java抽象类与接口的区别
本文介绍了Java抽象类与接口的区别,包括抽象类与接口的定义、使用场景、构造器、继承、多继承、实现、方法重写、默认方法、静态方法等方面的内容。
Java后端工程师
2017/12/30
1.8K0
Java基础:Java抽象接口
在Java中,一个没有方法体的方法应该定义为抽象方法,而如果一个类中含有抽象方法,则该类必须定义为一个抽象类
栗筝i
2022/12/02
4290
[ Java学习基础 ] Java的抽象类与接口
一、抽象类 1. 抽象类  Java语言提供了两种类:一种是具体类;另一种是抽象子类。 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。   由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含
Kevin_Zhang
2018/05/22
1.2K0
Java基础(十一):抽象类、接口、内部类
选择保留其中一个,通过“接口名.super.方法名"的方法选择保留哪个接口的默认方法
冬天vs不冷
2025/01/21
2550
Java基础(十一):抽象类、接口、内部类
【Java 学习】:抽象类&接口
💢💢在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。
IsLand1314
2024/10/15
1670
【Java 学习】:抽象类&接口
Java: Java中接口和抽象类的区别以及应用场景
在JAVA编程语言中是接口一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
Freedom123
2024/03/29
2600
Java——抽象类与接口的前世今生
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。
说故事的五公子
2020/04/13
8330
【JAVA抽象类和接口】
在Java中Object类是所有类的父类。默认它们都继承了Object这个父类,所有类的引用都可以用Object的引用来进行接收。
ImAileen
2024/12/08
1710
【JAVA抽象类和接口】
Java中接口与抽象类的区别
在Java中,被关键字abstract修饰的类称为抽象类;被abstract修饰的方法称为抽象方法,抽象方法只有方法声明没有方法体。 抽象类有以下几个特点: 1、抽象类不能被实例化,只能被继承。 2、包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法(抽象类可以包含普通方法)。 3、抽象方法的权限修饰符只能为public或者protected,默认情况下为public。 4、一个类继承于一个抽象类,则子类必须实现抽象类的抽象方法,如果子类没有实现父类的抽象方法,那子类必须定义为抽象类。 5、抽象类可以包含属性、方法、构造方法,但构造方法不能用来实例化对象,只能被子类调用。
赵哥窟
2020/01/02
8330
java_抽象类、接口、多态的使用
使用 abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。
咕咕星
2020/08/19
4110
抽象类和接口(我学习做的笔记供大家参考)
public abstract void toHospitol();//抽象方法
全栈程序员站长
2022/06/29
2400
【Java】抽象类和接口
2.抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则编译器会报错,但如果子类也是抽象类,那么其子类可以不对父类中的抽象类进行重写
喜欢做梦
2024/11/25
1440
【Java】抽象类和接口
JavaSE/抽象类与接口
为了更加深入的学习JavaSE这门语言,抽象类与接口是我们必须要学习的知识。本文使用代码+案例的形式介绍抽象类与接口。
用户10788736
2023/10/16
1630
相关推荐
字节后端面试题:接口和抽象类的区别?抽象类可以多继承吗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验