迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

抽象类和接口分别应该在什么时候使用

作者:迹忆 最近更新:2022/12/04 浏览次数:

在本篇我们将要学到在什么情况下使用抽象类要比使用接口程序更有效率。

抽象类的使用

一个抽象类使用关键字abstract来定义,抽象类可以包含抽象方法,当然也可以不包含抽象的方法。抽象类不能被实例化成对象,但是它可以被继承。一个抽象类可能包含有静态属性,也包含有静态方法。当一个抽象类被继承以后,子类通常要实现其父类中的所有的抽象的方法。然而,如果子类没有实现所有的父类中的抽象的方法,那么这个子类也必须被定义成抽象类。

抽象方法就是不用没有方法体的——也就是没有实现的方法(没有花括号并且后面跟着分号),就像下面这样:

abstract void sum(int a, int b);

如果在你的程序中有下面的这些情况,那你就要考虑使用抽象类了:

1. 你想要在几个关联紧密的类之间共享代码。

2. 你想要继承抽象类的那些类有一些公共方法或属性抑或是有修改protected或private属性的权限。这时你也可以考虑使用抽象类。

3. 你想要声明非静态或者是非最终执行的属性。你可以获得并且修改这些属性所属的对象的状态。

接口的使用

一个接口仅仅是一个对象的方法的声明,具体的实现并不在接口中来做。一个接口使用关键字interface来定义。在接口中,我们定义一个对象可以执行什么类型的操作。这些操作方法由实现该接口的类来实现。接口可以看作是一个类和外部环境之间的联系。外部环境通过接口可以知道一个对象可以向其提供什么样的操作。该联系是在程序编译的时候有解析器激活。

interface Vehical {
       // declaration
       void changeGear(int newValue);
       void speedUp(int increment);
       void applyBrakes(int decrement);
}
class Car implements Vehical {
     int speed = 0;
     int gear = 1;
     // implementation
     void changeGear(int newValue) {
          gear = newValue;
     }
     void speedUp(int increment) {
          speed = speed + increment;
     }
     void applyBrakes(int decrement) {
          speed = speed - decrement;
     }
     void printStates() {
          System.out.println(" speed:" + speed + " gear:" + gear);
     }
}

当有下面的情形的时候,我们可以考虑使用接口:

1. 用相互之间无关的类实现你的接口。举例来说,可比较的和可克隆的那些接口可以使用无关的类来实现。

2. 你想指定一个特定数据类型的行为,但是不用去关心由谁来实现这一行为。

3. 你想要利用多继承的优势。

以上就是对何时使用抽象类以及何时使用接口所做的简单的介绍。希望对大家有所帮助。

以上文章翻译自:When to use Abstract class and Interface

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

C# 中的 async 和 await

发布时间:2024/02/03 浏览次数:116 分类:编程语言

async 和 await 关键字用于 C# 中的异步编程。C# 中的异步编程 如果同步应用程序中有任何进程被阻止,则整个应用程序将被阻止并停止响应

在 C# 中的接口中实现属性

发布时间:2024/02/01 浏览次数:123 分类:编程语言

本文介绍如何在 C# 中的接口中实现属性。C# 中的接口可以有许多不同的属性,以及指定我们应该如何在其中声明属性可用性的访问修饰符。该接口通常充当不同成员和对象的默认实现。

在 Java 中实现多个接口

发布时间:2023/11/13 浏览次数:174 分类:Java

这篇文章就是要了解一个类如何在 Java 中实现多个接口。本文介绍了一个类如何在 Java 中实现多个接口,并列出了一些示例代码来理解该主题。在 Java 中,接口类似于类,只是它只能有抽象方法

Java 中接口和抽象类的区别

发布时间:2023/11/13 浏览次数:137 分类:Java

这篇文章就是要了解 Java 中接口和抽象类之间的区别。本文介绍了 Java 中接口和抽象类之间的区别,并列出了一些示例代码来理解该主题。

Java 中的 BiFunction 接口

发布时间:2023/11/13 浏览次数:64 分类:Java

在本文中,我们将讨论 Java 中的 BiFunction 接口。BiFunction 接口是 Java 8 中引入的内置函数式接口,位于 java.util.function 包中。与接受两个泛型(一个参数类型和一个返回类型)的 Function 接口不同

Java中的抽象类构造函数

发布时间:2023/08/11 浏览次数:182 分类:Java

构造函数用于初始化由其名称调用的对象,构造函数的名称与类的名称相同。抽象类是用abstract关键字声明的,抽象类也有一个构造函数,如果我们在抽象类中没有定义任何构造函数,那么JVM会

Java 中的泛型接口

发布时间:2023/08/07 浏览次数:80 分类:Java

本文将讨论泛型接口以及如何使用它。 我们将使用示例和解释来讨论该主题,以使该主题更容易。Java 中的泛型接口

Java中的接口默认方法

发布时间:2023/08/01 浏览次数:155 分类:Java

本文介绍如何在Java中使用接口中的默认方法。Java中的接口默认方法 在接口只有抽象方法之前,Java 8 就引入了默认方法。 默认或防御方法允许开发人员在不破坏实现的情况下向接口添加新方法

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便