Beim Überschreiben einer Superklassenmethode müssen Sie bestimmte Regeln befolgen, wenn die Methode eine Ausnahme auslöst.
Wenn eine Methode der Oberklasse eine bestimmte Ausnahme auslöst, sollte die Methode in der Unterklasse dieselbe Ausnahme oder denselben Untertyp auslösen.
Im folgenden Beispiel löst die readFile()-Methode der Oberklasse eine IOException aus, während die readFile()-Methode der Unterklasse eine FileNotFoundException auslöst.
Da die FileNotFoundException-Ausnahme ein Untertyp von IOException ist, kann das Programm ohne Fehler kompiliert und ausgeführt werden.
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; abstract class Super { public String readFile(String path) throws IOException { throw new IOException(); } } public class ExceptionsExample extends Super { @Override public String readFile(String path) throws FileNotFoundException { Scanner sc = new Scanner(new File("E://test//sample.txt")); String input; StringBuffer sb = new StringBuffer(); while (sc.hasNextLine()) { input = sc.nextLine(); sb.append(" "+input); } return sb.toString(); } public static void main(String args[]) { String path = "E://test//sample.txt"; ExceptionsExample obj = new ExceptionsExample(); try { System.out.println(obj.readFile(path)); }catch(FileNotFoundException e) { System.out.println("Make sure the specified file exists"); } } }
Tutorials Point is an E-learning company that set out on its journey to provide knowledge to that class of readers that responds better to online content. With Tutorials Point, you can learn at your own pace, in your own space. After a successful journey of providing the best learning content at tutorialspoint.com, we created our subscription based premium product called Tutorix to provide Simply Easy Learning in the best personalized way for K-12 students, and aspirants of competitive exams like IIT/JEE and NEET.
Wenn die Unterklasse dieselbe Ausnahme wie die Oberklasse auslöst, wird das Programm ebenfalls erfolgreich kompiliert und ausgeführt.
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; abstract class Super { public void sampleMethod()throws FileNotFoundException { System.out.println("Method of superclass"); } } public class ExceptionsExample extends Super { public void sampleMethod()throws FileNotFoundException { System.out.println("Method of Subclass"); } public static void main(String args[]) { ExceptionsExample obj = new ExceptionsExample(); obj.sampleMethod(); } }
Method of Subclass
Wenn eine Superklassenmethode eine Ausnahme auslöst, sollten Methoden in Unterklassen ihre Superklasse nicht auslösen.
Im folgenden Beispiel löst die readFile()-Methode der Oberklasse eine FileNotFoundException-Ausnahme aus, während die readFile()-Methode der Unterklasse eine IOException-Ausnahme auslöst, die die Oberklasse von FileNotFoundException ist.
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; abstract class Super { public String readFile(String path)throws FileNotFoundException { throw new FileNotFoundException(); } } public class ExceptionsExample extends Super { @Override public String readFile(String path)throws IOException { //method body ...... } }
Beim Kompilieren gibt das obige Programm die folgende Ausgabe aus:
ExceptionsExample.java:13: error: readFile(String) in ExceptionsExample cannot override readFile(String) in Sup public String readFile(String path)throws IOException { ^ overridden method does not throw IOException 1 error
Wenn die übergeordnete Klassenmethode eine Ausnahme auslöst, können Sie diese überschreiben, ohne eine Ausnahme auszulösen.
Im folgenden Beispiel löst die Methode „sampleMethod()“ der übergeordneten Klasse eine FileNotFoundException-Ausnahme aus, während die Methode „sampleMethod()“ der Unterklasse überhaupt keine Ausnahme auslöst. Dennoch lässt sich das Programm fehlerfrei kompilieren und ausführen.
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; abstract class Super { public void sampleMethod()throws FileNotFoundException { System.out.println("Method of superclass"); } } public class ExceptionsExample extends Super { public void sampleMethod() { System.out.println("Method of Subclass"); } public static void main(String args[]) { ExceptionsExample obj = new ExceptionsExample(); obj.sampleMethod(); } }
Method of Subclass
Das obige ist der detaillierte Inhalt vonWelche Regeln gelten für die Methodenabdeckung und Ausnahmebehandlung in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!