抽象类和接口的区别


抽象类可以包含抽象方法和非抽象方法,而接口只能包含抽象方法。抽象类会被继承,而接口会被实现。阅读本文以了解抽象类和接口之间的其他区别,以及它们在实际程序中的使用方式。

什么是抽象类?

抽象类充当一个模板,存储程序的方法和数据成员。当您预计不同的子类将继承具有相同方法和字段的抽象类时,应该使用抽象类。

抽象类可以包含或不包含抽象方法,即没有方法体的方法。但是,如果一个类至少包含一个抽象方法,则该类必须声明为抽象类。

抽象类不能被实例化,但可以被继承。要使用抽象类,您必须从另一个类继承它,并在其中提供抽象方法的实现。您必须使用关键字**abstract**来创建抽象类或抽象方法。

抽象方法

抽象方法在基类中没有任何代码;代码将在其派生类中添加。如果您继承一个抽象类,则必须为其中的所有抽象方法提供实现。如果不这样做,则子类也必须声明为抽象类。

扩展抽象类

这是一个包含抽象方法和非抽象方法的抽象类的简单 Java 程序示例:

示例

// abstract class
abstract class Calculator{

   // abstract method
   abstract int add (int a, int b);

   // non-abstract; method with implementation
   int mul (int a, int b){
      return a*b;
   }
}
// Inheriting the abstract class
class Sum extends Calculator{
   public int add (int a, int b){
      return a+b;
   }
}
public class test{
   public static void main (String []args){
      Calculator obj = new Sum();
      System.out.println("The sum is: " + obj.add(2,3));
      System.out.println("The multiplication is: " +
      obj.mul(2,3));
   }
}

输出

它将产生以下输出:

The sum is: 5
The multiplication is: 6

什么是接口?

接口是 Java 中的一种引用类型。它类似于类。它是一组抽象方法的集合。一个类**实现**一个接口,从而继承接口的抽象方法。

除了抽象方法之外,接口还可以包含常量、默认方法、静态方法和嵌套类型。只有默认方法和静态方法才具有方法体。

编写接口类似于编写类。但是类描述对象的属性和行为。而接口包含类实现的行为。

除非实现接口的类是抽象类,否则接口的所有方法都需要在类中定义。

接口在以下方面类似于类:

  • 接口可以包含任意数量的方法。

  • 接口以**.java**扩展名写入文件,接口名称与文件名匹配。

  • 接口的字节码出现在**.class**文件中。

  • 接口出现在包中,其相应的字节码文件必须位于与包名称匹配的目录结构中。

接口在几个方面不同于类,包括:

  • 您不能实例化接口。

  • 接口不包含任何构造函数。

  • 接口中的所有方法都是抽象的。

  • 接口不能包含实例字段。接口中唯一可以出现的字段必须同时声明为**static**和**final**。

  • 接口不会被类扩展;它会被类实现。

  • 一个接口可以扩展多个接口。

接口具有以下属性:

  • 接口隐式地是抽象的。在声明接口时,不需要使用**abstract**关键字。

  • 接口中的每个方法也隐式地是抽象的,因此不需要**abstract**关键字。

  • 接口中的方法隐式地是公共的。

实现接口

**interface**关键字用于声明接口。以下是如何在 Java 中声明和实现接口的一个简单示例:

示例

// Declaring the Interface
interface Animal {
   public void eat();
   public void travel();
}
// Implementing the Interface
public class MammalInt implements Animal {
   public void eat() {
      System.out.println("Mammal eats");
   }
   public void travel() {
      System.out.println("Mammal travels");
   }
   public int noOfLegs() {
      return 0;
   }
   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

输出

它将产生以下输出:

Mammal eats
Mammal travels

结论

抽象类和接口是面向对象编程中的重要概念。在这里,我们使用 Java 编程示例来突出抽象类与接口的不同之处,以及开发人员如何使用这些概念。

更新于: 2022年7月28日

5K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.