接口和抽象有什么区别?

简介: 接口和抽象有什么区别?

接口和抽象有什么区别?



接口和抽象是 Java 面向对象设计的两个基础机制。

接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API 定义和实现分离的目的

  • 接口不能实例化,
  • 接口不能包含任何非常量成员,任何 field 隐含 public field final的意义
  • 非静态方式实现,要么是抽象方法,要么是静态方法。

抽象类不能实例化,用 abstract 关键字修饰 class, 其主要目的是代码重用

  • 抽象类和普通 Java 类在形式上没有太大区别。可以有一个或者多个抽象方法,- 抽象类大多用于抽取 Java 类共用方法实现或者共同成员变量。然后通过继承的方式到达代码复用的目的。


接口和抽象区别


  • 接口 Java 类实现 interface 使用 implements 关键词
  • 继承 抽象类是使用 extends 关键词
  1. 支持多重继承:接口支持;抽象类不支持;类不支持;
  2. 支持抽象函数:接口语义上支持;抽象类支持;类不支持;
  3. 允许函数实现:接口不允许;抽象类支持;类允许;
  4. 允许实例化:接口不允许;抽象类不允许;类允许;
  5. 允许部分函数实现:接口不允许;抽象类允许;类不允许。
  6. 定义的内容:接口中只能包括public函数以及public static final常量;抽象类与类均无任何限制。
  7. 使用时机:当想要支持多重继承,或是为了定义一种类型请使用接口;

当打算提供带有部分实现的“模板”类,而将一些功能需要延迟实现请使用抽象类;当你打算提供完整的具体实现请使用类。


public class ArrayLis<E> extends AbsractLis<E> implements Lis<E>, RandomAccess, Cloneable, java.io.Serializable
{
      //...
}

抽象的极限性


Java 不支持多继承。Java 类可以实现多个接口,因为接口是抽象方法的集合,采用声明抽象方法的方式,但是并不能通过扩展多个抽象类来重用逻辑。

还有一些场景,需要抽象与具体实例化无关的通用逻辑,比如 Utils 类,但是如果采用抽象类,这样就存在单继承的问题。


面向对象设计


面向对象的基本要素:封装,继承,多态。

  • 封装的目的是隐藏事务内部的实现细节,以便提高安全性和简化编程。封装提供了合理边界,避免外部调用者接触内部细节。比如,多线程编程是,暴露内部状态,冗余导致并发修改的问题。
  • 继承是代码复用的基础机制,继承是一种紧耦合的关系,父类代码修改,子类行为会跟着变动。如果过度滥用,会起到不好的效果。
  • 多态,说到多态,会立即想到重写(override) 和重载 (overload),向上转型。
  1. 重写是父子类中相同名字和参数的方法,不同的实现。
  2. 重载是相同名字方法,但是不同的参数。

要注意的是 方法名称和参数一致,但是返回值不同,这样不是重载,编译会报错!!


public int doSomething() {
    return 0;
}
// 输入参数不同,意味着方法签名不同,重载的体现
public int doSomething(Lis<String> srs) {
  return 0;
}
// return类型不一样,编译不能通过
public short doSomething() {
   return 0;
}


面向对象设计原则


  • 单一职责原则 , 类或者对象最好是单一职责,如果发现某个类中承担着多种义务,可以考虑拆分重构。
  • 开闭原则,对扩展是开放的,但是对修改是关闭的。程序设计应保证平滑的扩展性,尽量避免因为新增同类功能而修改已实现。这样可以减少回归问题。(回归测试)。
  • 里式转换原则, 进程继承抽象时,凡是可以用父类或者基类的地方,都可以用子类转换。简单的说,子类对象可以赋给父类对象,但父类对象不能赋值给子类对象。
  • 接口分离原则,在进行类和接口设计时,如果在一个接口中定义了太多方法,子类可能只需要实现其中部分方法,这样就破坏了程序的内聚性,可采用接口分离方式,进行解耦。这样实现了高内聚,低耦合。
  • 依赖反转,实体应该依赖于抽象而不是实现。也就是说,高层次模块,不应该依赖低层次模块。而是基于抽象接口。抽象接口不应该依赖具体,而具体要依赖于抽象。


interface Coder {
        void wearSweater(Sweater sweater);
  }
  class XiaoMing implements Coder{
      @Override
      public void wearSweater(Sweater sweater) {
      }
  }
  interface Sweater {
  }
  class TneckSweater implements Sweater {
  }
Coder xiaoming = new XiaoMing();
Sweater tneckSweater = new TneckSweater();
xiaoming.wearSweater(tneckSweater);


640.png


开闭原则改造如下代码:


public class VIPCenter {
    void serviceVIP(T extend User user>) {
        if (user insanceof SlumDogVIP) {
            // 穷X VIP,活动抢的那种
            // do somthing
         } else if(user insanceof RealVIP) {
           // do somthing
        }
        // ...
}

修改关闭,扩展开放的原则:


public class VIPCenter {
    private Map<User.TYPE, ServiceProvider> providers;
       void serviceVIP(T extend User user) {
          providers.get(user.getType()).service(user);
       }
}
interface ServiceProvider{
       void service(T extend User user) ;
}
class SlumDogVIPServiceProvider implements ServiceProvider{
        void service(T extend User user){
              // do somthing
        }
}
class RealVIPServiceProvider implements ServiceProvider{
        void service(T extend User user) {
             // do something
         }
}


相关文章
|
1天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
11天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
449 192
|
3天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
9天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
5天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
315 195

热门文章

最新文章