Handling java exceptions in inheritance

just look at the program below ..

import java.io.*;
import java.rmi.*; 
class class1 
{
 public void m1() throws RemoteException 
{
 System.out.println("m1 in class1"); } }

 class class2 extends class1 
{
  public void m1() throws IOException 
{  
   System.out.println("m1 in class2");

} }

class ExceptionTest2 
 { 
public static void main(String args[])
 {
   class1 obj = new class1();
  try{ 
obj.m1(); 
} catch(RemoteException e){ System.out.println("ioexception"); }

} }

compile-time error ..... cannot override m1 () method

Now, if I replaced RemoteException in the parent class with IOException and vice versa in the child class. Then it compiles.

Any other checked exception combinations do not work here, even if I use a checked exception, which is on the same level.

Now I am confused, why redefinition occurs only in one case, and not in other cases ??? I will be very grateful for your reply.

+3
source share
4 answers

Exceptionsthe rule in Inheritancelooks something like this:

" , throws parent ( )".

RemoteException IOException, RemoteException , IOException . (2), (class1), IOException, throw RemoteException, .

+3

RemoteException , IOException, , m1() . (RemoteException IOException , , RemoteException IOException).

: , ANY- class1 RemoteException m1(), , class2 generic ( class2 class1).

+2

RemoteException - IOEception, . 2 1, . class1.m1 IOException, 2.m1 RemoteException, IO.

+1

Since two methods with the same signatures cannot raise different types of exceptions.

0
source

Source: https://habr.com/ru/post/1760497/


All Articles