Questão

3 respostas
M

Ae galera, ai vai uma questão que eu encontrei em um simulado por ai.
A resposta apresenta 3 alternativas corretas. Eu acertei duas, e a terceira eu não entendi o porque, alguekm pode me ajudar ?


±-Exception
|
±-BookingException
|
±-NoRoomsAvailableException
|
±-CreditCardException

Your base class BaseHotel has a method declared as follows:

public void bookRoom(int roomNumber, String creditCardNumber)
throws BookingException{}

A class LoveHotel is derived from BaseHotel has a method which overrides

a) BaseHotel.bookRoom.public void bookRoom(int roomNumber, String creditCardNumber) {}

b) public void bookRoom(int roomNumber, String creditCardNumber) throws Throwable {}

c) public void bookRoom(int roomNumber, String creditCardNumber) throws Exception {}

d)public void bookRoom(int roomNumber, String creditCardNumber) throws NoRoomsAvailableException {}

e) public void bookRoom(int roomNumber, String creditCardNumber) throws CreditCardException {}

3 Respostas

S

A pergunta é quais opções compilam?
Se for, A D E.

O método não pode lançar nenhuma exceção que o método da classe pai não lance, a não ser que seja uma RuntimeException.

Qualquer dúvida…

M

O método não pode lançar nenhuma exceção que o método da classe pai não lance, a não ser que seja uma RuntimeException.

Até ai eu sei, mas como vc pode ver o método da superclasse lança uma excessão do tipo BookingException.

A opção D e E, estão corretas porque lançam uma excessão menos restritiva que BookingException, como pode se ver na Hierarquia de Classes. Mas porque a A está correnta, já que você substituiu o método e o mesmo não está lançando uma excessão.

Abraços

S

Na verdade é o contrário. Eles lançam uma exceção mais restritiva (específica). Quanto mais próxima da raíz na hierarquia, mais abrangente é a exceção.

Então, a regra é aquela que escrevi acima. Não se pode lançar uma exceção que a classe pai não lance, a não ser que seja uma RuntimeException. Só isso. Não lançar nada é válido.

Resumindo, o método da classe filha pode:

  • Não lançar nenhuma exceção;
  • Lançar as mesmas exceções, ou exceções que extendam as exceções da classe pai;
  • Lançar uma exceção que seja (extenda) RuntimeException;

[]'s

Criado 23 de abril de 2006
Ultima resposta 24 de abr. de 2006
Respostas 3
Participantes 2