Exceção mais abrangente e menos abrangente

5 respostas
jroberto.nsc

Bem pessoal estou estudando novamente sobrescrita de métodos!

Minha dúvida é! o que é um exceção mais abrangente e menos abrangente?

Está relacionado a hierarquia ?

Meus Agradecimentos desde já!

5 Respostas

williamdasflores

Isso, por exemplo:
A excessão Exception e mais abrangente do que SQLException.
Entendeu?

L
Assim como as classes 'normais', as exceções possuem herança. Por exemplo, uma FileNotFoundException extende IOException. Vc pode criar suas exceções baseadas em hierarquia também, tipo assim:
class AplicacaoException extends RuntimeException {
}

class BancoDeDadosException extends AplicacaoException {
}

class NegocioException extends AplicacaoException {
}
Em um try/catch vc pode capturar os três tipos assim:
catch(AplicacaoException e)
ou apenas um tipo especifico:
catch(NegocioException e)

Outra observação é que exceções de Runtime NÂO precisa criar obrigatóriamente um bloco try/catch ou declarar no throws. NullPointerException vc não precisa criar um bloco try/catch, mas se for abrir um arquivo deverá tratar a exceção de IO ou subir a exceção através do throws.

jroberto.nsc

Correto!

Então não posso lançar exceções que estejam acima da arvore de herança?

Exemplo:

class Father{
      public void execSQL(String sql)throws Exception{
      //code  
      }
}

class Child extends Father{
      @Override
      public void execSQL(String sql)throws SQLException{
      //code  
      }
}
Le_Java_Reis

JrRoberto, camarada...

A grande questão das exceções na sobrescrita... A regra é basica;
Se for sobrescrever o metodo que (declara/lança)throws IOException voce não pode throws Exception...pois a sobrescrita não vai permitir declarar um metodo mais abrangente pois o metodo sobrescrito não pode se arriscar mais do que o metodo original sendo assim quando se trata de sobrescrita se o metodo original declarar qualquer tipo de Exception o metodo sobrescrito deve declarar ou a mesma Exception, ou menos abrangente(mais especifica).A mesma regra segue para declaração das clausulas catch( ){ };

import java.io.FileNotFoundException;
import java.io.IOException;

class Teste {

	public void getException() throws IOException{
		//throw new IOException();
	}
}

class Teste2 extends Teste{
	
	public void getException() throws FileNotFoundException{ // no caso se fosse throws Exception não compila
		//throw new FileNotFoundException();
	}	
}

Espero ter ajudado...Bons estudos...

jroberto.nsc

Le Java Reis! Valeu…

Entendi :slight_smile:

Criado 14 de outubro de 2011
Ultima resposta 14 de out. de 2011
Respostas 5
Participantes 4