如何在Java中確保子類覆蓋超類方法?
沒有方法體的方法稱為抽象方法。它只包含方法簽名和一個分號,以及它前面一個**抽象**關鍵字。
public abstract myMethod();
要使用抽象方法,您需要透過擴充套件其類來繼承它,併為其提供實現(方法體)。如果一個類包含至少一個抽象方法,則必須將其宣告為抽象類。
換句話說,如果您擴充套件了一個抽象類,則必須實現(覆蓋)其中的所有抽象方法,或者將其宣告為抽象類,否則對於每個未覆蓋的抽象方法都會生成一個編譯時錯誤,提示“subclass_name 不是抽象的並且沒有覆蓋 classname 中的抽象方法 abstractmethod_name”。
示例
下面的 Java 示例包含兩個抽象類:一個是包含 3 個抽象方法的抽象類 (MyClass),另一個是名為 AbstractClassExample 的類,它擴充套件了前一個類。
在子類中,我們只覆蓋了一個抽象方法 (display())。
import java.io.IOException;
abstract class MyClass {
public abstract void display();
public abstract void setName(String name);
public abstract void setAge(int age);
}
public class AbstractClassExample extends MyClass{
public void display(){
System.out.println("subclass implementation of the display method ");
}
public static void main(String args[]) {
new AbstractClassExample().display();
}
}編譯時錯誤
編譯時,上述方法會生成以下編譯時錯誤。
AbstractClassExample.java:9: error: AbstractClassExample is not abstract and does not override abstract method setAge(int) in MyClass
public class AbstractClassExample extends MyClass{
^
1 error因此,如果您需要確保子類覆蓋超類方法的特定方法,您只需要將所需方法宣告為抽象方法。
要使上述程式工作,您需要實現所有抽象方法,如下所示:
示例
abstract class MyClass {
public abstract void display();
public abstract void setName(String name);
public abstract void setAge(int age);
}
public class AbstractClassExample extends MyClass{
public void display(){
System.out.println("subclass implementation of the display method ");
}
public void setName(String name){
System.out.println("Name: "+name);
}
public void setAge(int age){
System.out.println("Age: "+age);
}
public static void main(String args[]) {
AbstractClassExample obj = new AbstractClassExample();
obj.display();
obj.setName("Krishna");
obj.setAge(20);
}
}輸出
subclass implementation of the display method Name: Krishna Age: 20
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP