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

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

个人主页:.29.的博客

学习社区:进去逛一逛~

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


比较:接口和抽象类

🚀共同点

共同点

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

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

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

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

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

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

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

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

相关推荐
Jun6261 分钟前
QT(2)-通过管道关联CMD
开发语言·qt·命令模式
就叫_这个吧19 分钟前
IDEA中Javaweb项目创建+servlet,实现简单的信息录入获取
java·servlet·intellij-idea·web
程序员Jelena22 分钟前
接口调用的代码实现:从入门到实战
java
代码钢琴师26 分钟前
Throttle4j 快速上手教程
java
Deep-w33 分钟前
【MATLAB】基于离散 LQR 的车辆横向轨迹跟踪控制方法研究
开发语言·算法·matlab
2601_9611940238 分钟前
考研资料电子版|去哪找|网盘
java·c语言·c++·python·考研·php
于先生吖41 分钟前
前后端分离二手商城开发,质检登记、回收回款整套业务源码部署教程
java·开发语言·uni-app
veminhe44 分钟前
关于下载pip install faiss-cpu失败的问题
python·pip·faiss
codeejun44 分钟前
每日一Go-76(架构篇)|多集群部署 / 容灾 / Failover / Backup / 热迁移
开发语言·架构·golang
战族狼魂1 小时前
从零构建企业级Hermes-Agent:复杂任务拆解、工具协同与安全落地实践
开发语言·人工智能·python