Java 中的 Class is not abstract and does not override abstract method 錯誤

Rupam Yadav 2023年10月12日
  1. 為什麼 Java 中出現錯誤 Class is not abstract and does not override abstract method
  2. 解決方案 1:重寫 canSpeak() 方法
  3. 解決方案 2:使 Baby 抽象化
  4. 解決方案 3:將 Human 設為一個類並在 Baby 類中擴充套件它
Java 中的 Class is not abstract and does not override abstract method 錯誤

本文將為我們在 Java 中使用抽象概念時出現的錯誤 Class is not abstract and does not override abstract method 找到解決方案。

為什麼 Java 中出現錯誤 Class is not abstract and does not override abstract method

在下面的程式碼中,我們有兩個類和一個介面。JavaExample 類有一個沒有任何主體部分的 main() 方法。我們建立一個帶有 abstract 方法 canSpeak()Human 介面,並以 boolean 作為返回型別。我們沒有為 canSpeak() 指定正文,因為 abstract 方法沒有正文。

在第二個類 Baby 中,我們使用 implements 關鍵字繼承 Human 介面。如果我們使用 IDE,就會出現錯誤,而當我們執行程式碼時,就會出現錯誤,如輸出所示。

如果我們檢視錯誤 Baby is not abstract and does not override abstract method canSpeak() in Human,我們可以理解它發生的原因。它說類 Baby 不是抽象的,它沒有重寫 Human 介面的方法 canSpeak()

出現此錯誤是因為在使用抽象方法實現任何類介面時,我們必須重寫抽象方法來定義主體。

public class JavaExample {
  public static void main(String[] args) {}
}

class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

輸出:

java: Baby is not abstract and does not override abstract method speak() in Human

解決方案 1:重寫 canSpeak() 方法

要修復 Baby is not abstract and doesn't override abstract method speak() in Human 錯誤,第一個解決方案是在實現 HumanBaby 類中重寫 abstract 方法 canSpeak() 介面。

canSpeak() 函式返回 false 並且在 main() 方法中我們建立 Baby 類的物件並呼叫重寫函式 canSpeak()。在輸出中,我們可以看到沒有錯誤,並且顯示了預期值。

public class JavaExample {
  public static void main(String[] args) {
    Baby baby = new Baby();
    System.out.println("Can Speak? " + baby.canSpeak());
  }
}

class Baby implements Human {
  @Override
  public boolean canSpeak() {
    return false;
  }
}

interface Human {
  abstract boolean canSpeak();
}

輸出:

Can Speak? false

解決方案 2:使 Baby 抽象化

另一種解決方案是將 Baby 類設為 abstract 類。我們這裡有相同的程式碼,但 Baby 是一個 abstract 類。無法初始化;我們只在 main() 方法中建立 Baby 類的例項。

public class JavaExample {
  public static void main(String[] args) {
    Baby baby;
  }
}

abstract class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

解決方案 3:將 Human 設為一個類並在 Baby 類中擴充套件它

最後一個解決方案是不同的。我們可以將介面 Human 更改為類,並使用關鍵字 extendsBaby 類中擴充套件該類,而不是實現介面。我們在 Human 類本身中指定 canSpeak() 的主體,這消除了錯誤。

public class JavaExample {
  public static void main(String[] args) {
    Baby baby = new Baby();
    System.out.println("Can Speak? " + baby.canSpeak());
  }
}

class Baby extends Human {}

class Human {
  boolean canSpeak() {
    return false;
  }
}

輸出:

Can Speak? false
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Error

相關文章 - Java Class