java de gestion des exceptions en matière d'héritage
il suffit de regarder le programme ci-dessous..
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"); }
} }
erreur de compilation.....ne peut pas remplacer la m1() la méthode
Maintenant si je remplace RemoteException dans la classe parente avec IOException et vice-versa dans la classe enfant. Puis c'est la compilation.
Tout autre checked exception des combinaisons ne sont pas de travail ici, evenif je suis en utilisant vérifié exception qui sont au même niveau.
Maintenant, je suis confus pourquoi est primordial de prendre place dans un seul cas, pas dans d'autres cas??? Je vais vraiment apprécier votre réponse.
Vous avez déjà posté cette question stackoverflow.com/questions/3520596/...
OriginalL'auteur user392675 | 2010-08-19
Vous devez vous connecter pour publier un commentaire.
Exceptions
règle dansInheritance
va comme ceci:"Quand un sous-classe remplace une méthode dans la classe super puis une sous-classe de la méthode de définition du seulement spécifier l'ensemble ou sous-ensemble d'exceptions classes dans le
throws
de la clause de laparent
méthode de classe(ou méthode substituée)".RemoteException
hériteIOException
, doncRemoteException
est un enfant de la classe etIOEXception
est une super-classe. Cela signifie que le sous-classe(classe 2) méthode qui remplace classe parent(class1), qui jetteIOException
, peutthrow
RemoteException
mais pas vice-versa.OriginalL'auteur Madhusudan Joshi
RemoteException
est plus spécifique queIOException
de sorte que vous pouvez déclarer que le membrem1()
de la classe qui hérite jette. (RemoteException
hérite deIOException
et doncRemoteException
est un type spécial deIOException
).Il ne fonctionne pas dans l'autre sens: en précisant que TOUT objet de type
class1
jette unRemoteException
dans ses membresm1()
, vous ne pouvez pas spécifier que la même méthode dansclass2
jette quelque chose de plus générique (parce queclass2
type d'objets sont égalementclass1
type d'objets).OriginalL'auteur Andre Holzner
Un RemoteException est un IOEception, mais pas l'inverse. Depuis la classe 2 s'étend de la classe 1, toutes les exceptions lancées doit être compatible avec la super-classe des exceptions. Lorsque class1.m1 jette un IOException, class2.m1 pouvez jeter un RemoteException puisque c'est une spécialisation d'une IOException.
OriginalL'auteur Thomas Lötzer
Parce que les deux méthodes, avec les mêmes signatures ne peuvent pas lancer de différentes sortes d'exceptions.
OriginalL'auteur Pierre Gardin