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

学习笔记087——Java接口和抽象类的区别和使用

文章目录

  • 1、主要区别
  • 2、使用场景
    • 2.1 使用接口的情况:
    • 2.1 使用抽象类的情况:
  • 3、Java 8及以后的接口增强
  • 4、设计建议

1、主要区别

特性接口(Interface)抽象类(Abstract Class)
定义方式使用interface关键字使用abstract class关键字
方法实现Java 8前不能有实现(默认方法除外)可以有具体方法和抽象方法
变量默认public static final(常量)可以是普通变量
构造方法不能有可以有
多继承一个类可实现多个接口一个类只能继承一个抽象类
访问修饰符方法默认public方法可以有各种访问修饰符
设计目的定义行为规范提供部分实现,作为基类

2、使用场景

2.1 使用接口的情况:

  1. 需要定义一组行为规范,让不同类实现
  2. 需要多重继承行为时
  3. 需要定义回调机制时
  4. 希望实现松耦合设计时
// 接口示例
public interface Drawable {void draw();  // 抽象方法default void resize() {  // Java 8默认方法System.out.println("Resizing...");}
}class Circle implements Drawable {@Overridepublic void draw() {System.out.println("Drawing a circle");}
}

2.1 使用抽象类的情况:

  1. 多个相关类共享代码
  2. 需要有非final变量
  3. 需要控制子类的访问权限
  4. 需要定义模板方法模式
// 抽象类示例
public abstract class Animal {private String name;public Animal(String name) {this.name = name;}public abstract void makeSound();public void eat() {System.out.println(name + " is eating");}
}class Dog extends Animal {public Dog(String name) {super(name);}@Overridepublic void makeSound() {System.out.println("Woof!");}
}

3、Java 8及以后的接口增强

从Java 8开始,接口可以包含:

  1. 默认方法(default methods) - 提供默认实现
  2. 静态方法(static methods) - 接口级别的工具方法
public interface Vehicle {// 抽象方法void start();// 默认方法default void stop() {System.out.println("Vehicle stopped");}// 静态方法static void honk() {System.out.println("Honk honk!");}
}

4、设计建议

  1. 优先考虑接口 - 因为Java不支持多重继承,接口更灵活。
  2. 当需要共享代码时使用抽象类。
  3. 接口适合定义**“能做什么”**(行为)
  4. 抽象类适合定义**“是什么”**(本质)
  5. 考虑使用**“接口+抽象类”**的组合模式,接口定义行为,抽象类提供部分实现。
http://www.xdnf.cn/news/13470.html

相关文章:

  • 对比**CMake** 和 **PlatformIO** 构建嵌入式项目方式
  • C++(5)
  • Wordpress安装插件提示输入ftp问题解决
  • AIStarter一键启动平台:轻松运行AI项目,无需复杂配置
  • 五种IO模型与阻塞IO
  • LeetCode - 1047. 删除字符串中的所有相邻重复项
  • dockerfile 简单搭建 和 supervisor 进程管理工具
  • JAVASE:方法
  • 亚远景-ASPICE在汽车软件全生命周期管理中的作用
  • 7. 整数反转
  • 探索奇妙的LLM应用:提高工作效率的AI代理和RAG合集
  • Jemily张洁领域成就概述:匠心筑品牌,革新引航家用电梯新征程
  • 31.Python编程实战:自动化批量压缩与解压文件
  • GoldenDB简述
  • 【DVWA系列】——xss(DOM)——High详细教程
  • debian12 修改MariaDB数据库存储位置报错
  • 界面控件Kendo UI在实战应用——打通数据链路,重塑业务效率
  • UE5 蓝图按键控制物体旋转、暂停
  • Android NDK: Could not find application project directory
  • 【Mac技巧】修复Mac应用程序无法打开的解决办法
  • tryhackme 之反弹 shell 理解
  • FastAPI的数据契约:Pydantic与SQLModel联手打造健壮API
  • 斐讯N1部署Armbian与CasaOS实现远程存储管理
  • JS之Dom模型和Bom模型
  • strs[0] == “0“是否为字符串内容比较
  • 在GIS 工作流中实现数据处理(2)
  • 想考Kubernetes认证?CKA考试内容与报名全解析
  • 华测CGI-430配置
  • RAG文档解析难点3:Excel多层表头的智能解析与查询方法
  • Linux操作系统-性能优化