当前位置: 首页 > news >正文

接口和抽象类的区别

一、前言

  • 接口(Interface)和抽象类(Abstract Class)都是用来实现抽象和多态的机制,但它们的用途和结构有所不同。

二、通俗理解

  • 接口的设计是自上而下的。
    • 我们知晓某一行为,于是基于这些行为约束定义了接口,一些类需要有这些行为,因此实现对应的接口。
  • 抽象类的设计是自下而上的。
    • 我们写了很多类,发现它们之间有共性,有很多代码可以复用,因此将公共逻辑封装成一个抽象类,减少代码兄余
  • 所谓的自上而下指的是先约定接口,再实现。
  • 自下而上指的是先有一些类,才抽象了共同父类。
  • ps:(可能和学校教的不太一样,但是实战中很多时候都是因为重构才有的抽象)。

三、核心区别对比

在这里插入图片描述


四、代码示例

  • 抽象类
// 抽象类:动物基类
abstract class Animal {
    // 抽象方法
    public abstract void sound();
    
    // 具体方法
    public void sleep() {
        System.out.println("Zzz...");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Woof!");
    }
}
  • 接口
// 接口:游泳能力定义
interface Swimable {
    void swim();  // 隐式 public abstract
}

class Fish implements Swimable {
    @Override
    public void swim() {
        System.out.println("Gliding through water");
    }
}
  • 组合使用
// 抽象类 + 接口
abstract class Bird extends Animal implements Swimable {
    // 继承动物属性,同时获得游泳能力
}

class Duck extends Bird {
    @Override
    public void sound() {
        System.out.println("Quack!");
    }

    @Override
    public void swim() {
        System.out.println("Floating on water");
    }
}

五、应用场景建议

  • 选抽象类需要共享代码逻辑时(如多个子类有相同方法实现)
  • 选接口需要定义行为规范时(如不同类需要相同能力)
  • 组合使用既需要代码复用又需要多态能力时(如示例中的Bird类)

相关文章:

  • maven 依赖的优先级
  • 一个批量文件Dos2Unix程序(Microsoft Store,开源)
  • 【 Beautiful Soup (bs4) 详解】
  • 五、用例篇
  • 【二轮征稿】2025年IEEE第三届模式识别、机器视觉与人工智能国际会议(IEEE PRMVAI 2025)
  • 订阅不到topic排查方式
  • 上下文管理器需要实现哪两种方法以及相关应用
  • 进行性核上性麻痹患者,饮食 “稳” 健康
  • 消融实验_草稿
  • 使用setTimeout模拟setInterval
  • 山东省第二人民医院:基于DeepSeek的医疗AI智慧安全运营应用
  • 河北工程大学e2e平台,python
  • 使用Python写入JSON、XML和YAML数据到Excel文件
  • 高速电路设计概述
  • 代码大模型的发展:通义灵码与KwaiCoder的技术探讨
  • 分布式锁在秒杀场景中的Python实现与CAP权衡
  • 【Delphi】中共享锁实现
  • 腾讯视频安卓版如何开启4K超清画质-提升手机端观影清晰度体验
  • 操作系统 4.2-键盘
  • 论文学习:《利用图注意力网络增强单细胞多组学数据的整合》
  • 微云影视自助建站系统/河南网站seo靠谱
  • 用fw做网站页面/百度首页排名优化价格
  • 小视频制作软件/网络优化seo
  • 为什么不能用来名字做网站名/广州seo公司排行
  • 电子商务与网站建设/千锋教育学费多少
  • 沂南网站建设/徐州百度推广总代理