# Java 中的抽象方法

> 原文： [https://beginnersbook.com/2014/01/abstract-method-with-examples-in-java/](https://beginnersbook.com/2014/01/abstract-method-with-examples-in-java/)

没有主体的方法（没有实现）被称为抽象方法。方法必须始终在抽象类中声明，或者换句话说，如果类具有抽象方法，则应该将其声明为抽象方法。在上一个教程中我们讨论了抽象类，如果你还没有检查过它，请在这里阅读它： [Java 中的抽象类](https://beginnersbook.com/2013/05/java-abstract-class-method/)，在阅读本指南之前。
这是一个抽象方法在 java 中的外观：

```java
public abstract int myMethod(int n1, int n2);
```

如你所见，这没有身体。

## 抽象方法规则

1.  抽象方法没有正文，它们只有如上所示的方法签名。
2.  如果一个类有一个抽象方法，它应该被声明为`abstract`，反之亦然，这意味着一个抽象类不需要一个抽象方法是强制性的。
3.  如果常规类扩展了一个抽象类，那么该类必须实现抽象父类的所有抽象方法，或者它也必须被声明为`abstract`。

## 示例 1：抽象类中的抽象方法

```java
//abstract class
abstract class Sum{
   /* These two are abstract methods, the child class
    * must implement these methods
    */
   public abstract int sumOfTwo(int n1, int n2);
   public abstract int sumOfThree(int n1, int n2, int n3);

   //Regular method 
   public void disp(){
	System.out.println("Method of class Sum");
   }
}
//Regular class extends abstract class
class Demo extends Sum{

   /* If I don't provide the implementation of these two methods, the
    * program will throw compilation error.
    */
   public int sumOfTwo(int num1, int num2){
	return num1+num2;
   }
   public int sumOfThree(int num1, int num2, int num3){
	return num1+num2+num3;
   }
   public static void main(String args[]){
	Sum obj = new Demo();
	System.out.println(obj.sumOfTwo(3, 7));
	System.out.println(obj.sumOfThree(4, 3, 19));
	obj.disp();
   }
}

```

输出：

```java
10
26
Method of class Sum
```

## 例 2：接口中的抽象方法

默认情况下，[接口](https://beginnersbook.com/2013/05/java-interface/)的所有方法都是公共抽象的。您不能在接口中使用具体的（常规方法和正文）方法。

```java
//Interface
interface Multiply{
   //abstract methods
   public abstract int multiplyTwo(int n1, int n2);

   /* We need not to mention public and abstract in interface
    * as all the methods in interface are 
    * public and abstract by default so the compiler will
    * treat this as 
    * public abstract multiplyThree(int n1, int n2, int n3);
    */
   int multiplyThree(int n1, int n2, int n3);

   /* Regular (or concrete) methods are not allowed in an interface
    * so if I uncomment this method, you will get compilation error
    * public void disp(){
    *    System.out.println("I will give error if u uncomment me");
    * }
    */
}

class Demo implements Multiply{
   public int multiplyTwo(int num1, int num2){
      return num1*num2;
   }
   public int multiplyThree(int num1, int num2, int num3){
      return num1*num2*num3;
   }
   public static void main(String args[]){
      Multiply obj = new Demo();
      System.out.println(obj.multiplyTwo(3, 7));
      System.out.println(obj.multiplyThree(1, 9, 0));
   }
}

```

输出：

```java
21
0
```

**参考：**

[抽象方法 javadoc](https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)