Affichage Java

Fermé
souga - 9 janv. 2015 à 18:04
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 9 janv. 2015 à 18:26
Bonsoir à tous
Bon voilà ma question : on a deux classe, la classe Message et la classe WarnMessage qui hérite de la 1ére classe, et le programme principale qui affiche des message,voici le code :

<code type="java">
public class Message {////////classe Message
private String msg ;
public Message (String s) {
msg = s ;}
public String getMessage(){
return msg ;}
}
public class WarnMessage extends Message{////////Classe WarnMessage
public WarnMessage (String m){
super (m) ;}
public String getMessage(){
return "Warning : " +
super.getMessage() ; }
}

Public class Test{/////////////////////Programme principale
public static void main (String[] args){
WarnMessage m1 = new WarnMessage ("Hello");
System.out.println (m1.getMessage()) ;
Message m2 = (Message) new WarnMessage ("Hello");
System.out.println (m2.getMessage()) ;
WarnMessage m3 = (WarnMessage) new Message ("Hello");
System.out.println (m3.getMessage()) ;
}
}
< /code>
Après l'exécution voici les message qui s'affichent:
Warning : Hello
Warning : Hello
-La dernière ligne lance un erreur car une référence de type WarnMessage ne peut pas référencé un objet de type « Message ».

Ce que je ne comprend pas c'est pourquoi le deuxième affichage est "Warning : Hello" et non pas "Hello". Voila c tout j'espère que vous avez des réponses :)
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 janv. 2015 à 18:26
Bonjour,

Ce qui compte c'est le type de l'objet à l'exécution (celui obtenu avec new+constructeur), pas le type de la variable dans le code...

Et pour l'erreur c'est normal, tu ne peux caster une classe A vers B, que si A extends B (ou implements)

--
1