Java 抽象类和方法

原文:https://www.studytonight.com/java/abstract-class.php

在本教程中,我们将学习 Java 中的抽象类和方法,以及如何使用抽象类实现抽象。我们还将有一些代码示例。

抽象类

使用抽象关键字声明的类称为抽象类。抽象类可以有也可以没有抽象方法。我们不能创建抽象类的对象。

它用于实现抽象,但它并不提供 100%的抽象,因为它可以有具体的方法。

  • 抽象类必须用抽象关键字声明。
  • 它可以有抽象和非抽象的方法。
  • 它无法实例化。
  • 它用于抽象。

语法:

abstract class class_name { }

抽象方法

在抽象类中没有任何主体的方法被称为抽象方法。方法体将由其子类定义。抽象方法永远不可能是最终的和静态的。任何扩展抽象类的类都必须实现所有的抽象方法。

语法:

abstract return_type function_name (); //No definition

抽象类和方法的注意事项

这里有一些有用的要点要记住:

  1. 抽象类不是接口。它们是不同的,我们将在研究接口时研究这一点。
  2. 抽象类可以有也可以没有抽象方法。但是如果任何类甚至只有一个抽象方法,那么它必须被声明为抽象的。
  3. 抽象类可以有构造器、成员变量和普通方法。
  4. 抽象类永远不会被实例化。
  5. 当用抽象方法扩展抽象类时,必须在子类中定义抽象方法,或者使子类抽象。

抽象类示例

让我们以抽象类为例,试着理解它们如何在 Java 中使用。

在这个例子中,我们创建了一个抽象类 A,它包含一个方法callme(),使用类 B,我们扩展了这个抽象类。

abstract class A
{
  abstract void callme();
}
class B extends A
{
  void callme()
  {
    System.out.println("Calling...");
  }
  public static void main(String[] args)
  {  
    B b = new B();
    b.callme();
  }
}

打电话...

用非抽象方法抽象类

抽象类也可以有非抽象方法和抽象方法。但是请记住,在扩展类时,要为抽象方法提供定义。

abstract class A
{
  abstract void callme();
  public void show()
  {
    System.out.println("this is non-abstract method");
  }
}

class B extends A
{
  void callme()
  {
    System.out.println("Calling...");
  }
  public static void main(String[] args)
  {
    B b = new B();
    b.callme();
    b.show();
  }

打电话...这是非抽象的方法

使用抽象类的抽象

抽象是 OOPS 的一个重要特性。这意味着隐藏复杂性,只向用户展示功能。抽象类用于提供抽象。虽然它没有提供 100%的抽象,因为它也可以有具体的方法。让我们看看抽象类是如何被用来提供抽象的。

abstract class Vehicle
{
   public abstract void engine();
}
public class Car extends Vehicle {

    public void engine()
    {
        System.out.println("Car engine");
        // car engine implementation
    }

    public static void main(String[] args)
    {
        Vehicle v = new Car();
        v.engine();
    }
}

汽车发动机

这里通过将汽车类型的实例转换为车辆引用,我们隐藏了汽车类型在车辆下的复杂性。现在,Vehicle 引用可以用来提供实现,但它会隐藏实际的实现过程。

何时使用抽象方法&抽象类?

抽象方法通常被声明为两个或多个子类通过不同的实现以不同的方式做类似的事情。这些子类扩展了同一个抽象类,并为抽象方法提供了不同的实现。

抽象类用于在面向对象编程类层次结构的顶部定义行为的一般类型,并使用它的子类来提供抽象类的实现细节。