【Java】抽象类详解、抽象类与接口的区别

本文详细解释了抽象类和接口的概念,包括抽象类的特点、抽象方法的优势,以及抽象类与接口之间的主要区别,帮助读者理解如何在项目设计中合理选择使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是抽象类

例如:

public abstract class A {
   abstract int add(int x, int y);
   int sub(int x, int y) { 
      return x - y;
   }
}
  • 抽象类的类名前加修饰符abstract,可以包含抽象方法(用abstract修饰,只有方法原型,没有方法的实现),也可以包含非抽象方法,可包含常规类能包含的任何成员
  • 抽象类是没有具体实例对象的类,不能使用new方法进行实例化,只能用作超类,只有当子类实现了抽象超类中的所有抽象方法,子类才不是抽象类,才能产生实例,如果子类中仍有抽象方法未实现,则子类也只能是抽象类
  • 只有抽象类才可以包含抽象方法

抽象方法的优点

  • 隐藏具体细节信息,所有的子类使用的都是相同的方法原型,其中包含了调用该方法时需要了解的全部信息
  • 强迫子类完成指定的行为,规定所有子类的标准行为,是设计模式中的模板方法模式的体现

抽象类和接口的主要区别

  • 抽象类中可以包含普通类的任何成员,也可以包含非抽象方法,主要用于设计模式中的模板方法模式,如果项目设计时,遇到子类需要复用父类的实现方法,或者使用父类的成员变量,但又不希望直接使用父类时,那么可以声明父类为抽象类来解决;
  • 接口在 JDK 的当前版本中,也支持在接口中声明已实现的方法(用 default 关键字),而且接口中的变量,都为 public static final 修饰(可省略),而方法,都为 public abstract 修饰(可省略),但接口的主要用途还是用于约定实现类的“规范”;
  • 总之,如果需要用继承模板方法或变量来实现子类,那么就用抽象类声明父类,否则,只是约定“规范”那么就用接口。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超周到的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值