抽象类和接口之间的区别(附表)

抽象类和接口之间的区别(附表)

众所周知,抽象是指功能的内部实现,仅向用户展示实用性。 即,它的工作原理(显示,但是,该接口在 Java 中提供了完整的抽象,这是抽象类别无法做到的。

抽象类与接口

 抽象类和接口之间的主要区别在于,关联接口将单独扩展另一个Java接口; 关联抽象类别将开发另一个Java类别并实现多个Java接口。 默认情况下,Java 接口的成员不同。 Java 抽象类别将具有个人、受保护等类别成员。

抽象类和接口之间的区别

抽象类是在其声明中具有abstract关键字的类。 抽象类中应至少存在一个抽象方法,即没有主体的方法。 具体方法可能有多种。

您可以使用抽象类来生成具体类的蓝图。 但是,抽象方法必须由继承类实现。

该接口是可用于创建它的类的蓝图。 该接口没有具体的方法(有代码的方法)。 接口的方法都是抽象方法。

无法创建接口。 另一方面,实现接口的类可以被实例化。 实例变量从不在接口中使用。 但是,可以使用公共静态最终变量(也称为常量类变量)。

什么是抽象类?

抽象类是面向对象编程 (OOP) 中的基本概念,可用作其他类的蓝图或模板。 它是一个无法实例化的类,旨在由其他类扩展或子类化。 抽象类定义多个相关类将在继承层次结构中共享的公共属性和方法。

抽象类的主要特征和特性包括:

  1. 无法实例化: 抽象类不能直接用于创建对象或实例。 相反,它为子类提供了一个框架来继承和实现其属性和方法。
  2. 可能包含抽象方法: 抽象类包含一个或多个抽象方法。没有任何实现细节的方法声明。子类必须为这些抽象方法提供具体的实现。
  3. 可能包括具体方法: 抽象类还可以具有子类可以继承的具体(完全实现)方法。 这些方法可以提供所有子类共享的通用功能。
  4. 用于代码可重用性: 抽象类允许在单个抽象类中定义公共代码并在相关子类之间共享,从而提高代码的可重用性和 DRY(不要重复自己)原则。
  5. 遗产: 子类继承抽象类中定义的属性和方法。 这允许在保持通用结构的同时实现行为的专业化和定制。
  6. 抽象类与具体类: 抽象类与具体类不同,具体类可以直接实例化。 具体类提供了其所有方法的完整实现。

在 Java 和 C# 等语言中,关键字“abstract”定义了抽象类。 抽象类是构建具有共同特征和行为的相关类层次结构的重要工具,同时允许在派生类中进行自定义和专门化。

什么是接口?

接口是面向对象编程 (OOP) 中的一个基本概念,它定义了必须由任何遵循该接口的类实现的契约或方法签名集。 接口提供了一种在不直接支持它的语言中实现多重继承的方法,并且它们促进了代码抽象、模块化和灵活性。

接口的主要功能和特性包括:

  1. 方法签名: 接口定义了没有实现细节的方法签名的集合。 这些方法签名表示实现类必须提供的一组行为。
  2. 合同义务: 当一个类实现一个接口时,它必须为该接口中定义的所有方法提供具体的实现。 如果不这样做会导致编译错误。
  3. 多重继承: 与支持单一继承(扩展一个类)的类不同,一个类可以实现多个接口。 这允许一个类继承并提供多组行为。
  4. 抽象和多态性: 接口通过将“什么”(方法签名)与“如何”(方法实现)分开来促进抽象。 这种抽象允许多态性,其中实现相同接口的不同类的对象可以互换处理。
  5. 代码可重用性: 接口通过定义各种类可以实现的通用行为来促进代码的可重用性。 这提倡 DRY(不要重复自己)原则。
  6. 灵活性: 接口允许类根据它们实现的接口进行互换,从而实现松散耦合的代码。 这种灵活性在设计模块化和可扩展系统时特别有用。

接口广泛用于 Java、C# 和 TypeScript 等语言中,用于定义和强制类之间的契约,确保它们遵守指定的 API(应用程序编程接口)并共享共同的行为,同时允许不同的实现。

抽象类与接口对照表

 微分参数抽象类接口
实例化无法直接实例化。它不能直接实例化。
宗旨用作其他类的蓝图,并且可以提供带或不带实现的方法声明。它不能直接实例化。
方法可以有抽象(未实现)方法、具体(已实现)方法或两者的组合。仅包含方法签名,不包含任何实现; 所有方法都是隐式抽象的。
多重继承支持单继承; 一个类只能扩展一个抽象类。支持多重继承; 一个类可以实现多个接口。
构造函数可以有构造函数,在创建子类的实例时调用构造函数。不能有构造函数,因为它们不能直接实例化。
代码可重用性通过允许在相关类之间共享公共代码来提高代码的可重用性。通过定义类必须实现的常见行为集来提高代码的可重用性。
高度灵活在抽象和提供通用功能之间提供平衡。强调抽象和指定契约。
用例对于创建具有共享行为和属性的相关类的层次结构非常有用。对于定义确保实现类提供特定行为的契约很有用。
例如:abstract class Shape { abstract double area(); }interface Drawable { void draw(); }
EventXtra XNUMX大解决方案当您想要提供具有某些默认行为的公共基类但保留特定方法由子类实现时很有用。当您想要跨多个类定义契约或共享行为集而不指定公共基类时非常有用。

之间的主要区别 抽象类和接口

抽象类:

  • 可以同时具有抽象(未实现)和具体(已实现)方法。
  • 支持单继承,这意味着一个类只能扩展一个抽象类。
  • 可以有构造函数来初始化对象状态。
  • 允许创建具有默认行为的基类。
  • 在抽象和通用功能之间提供平衡。
  • 在创建具有共享属性和行为的相关类的层次结构时很有用。

接口:

  • 仅包含方法签名,不包含任何实现; 所有方法都是隐式抽象的。
  • 支持多重继承,意味着一个类可以实现多个接口。
  • 不能有构造函数,因为接口无法实例化。
  • 定义一个契约,指定实现类必须提供的一组方法。
  • 强调抽象并指定一组共享的行为。
  • 对于定义合约和确保类遵守特定的 API 要求非常有用。

结论

抽象类允许您创建子类可以实现或覆盖的功能,而接口允许您声明但不实现功能。 虽然一个类只能扩展一个抽象类,但它可以实现多个接口。

参考文献

  1. https://dl.acm.org/doi/abs/10.1145/1040305.1040314
  2. https://books.google.com/books?hl=en&lr=&id=8M3F_sSSvWkC&oi=fnd&pg=PR13&dq=+interface+java&ots=Qo15NiH18i&sig=Y6OESYd5a6G709ynnLGB4Ry97yU
点1
一个请求?

我付出了很多努力来写这篇博文,为您提供价值。 如果您考虑在社交媒体上或与您的朋友/家人分享,这对我很有帮助。 分享是♥️

尼迪的头像

关于尼迪

你好!我是尼迪。

在 EHL,一切都是关于休闲娱乐的美味、简单食谱。所以来和我一起去海滩,放松并享受美食吧。

发表评论

您的电邮地址不会被公开。 必填带 *