CSC 3101 – Algorithmique et langage de programmation

Portail informatique

Héritage

Vous pouvez retrouver le jeu ici.

La déclaration class Sword extends Weapon :
  1. est incorrecte
  2. déclare une classe visible d'un autre package
  3. déclare que Sword hérite de Weapon
  4. déclare que Sword met en œuvre Weapon
Déclare que Sword hérite de Weapon. La déclaration est correcte, la classe Sword a la visibilité package (donc pas visible d'autres packages), et Sword mettrait en œuvre Weapon si la déclaration était class Sword implements Weapon.

Qu'affiche ce programme ?
  1. Le programme ne compile pas
  2. Miaou!
  3. MiaouTchoum!
  4. Le programme compile, mais se termine sur une erreur
MiouTchoum!. Le code est correcte puisqu'un ChatEnrhume est un Chat (l'affectation Chat chat = new ChatEnrhume() est donc correcte). La variable chat référence une instance de ChatEnrhume, donc chat.ditMiaou() appelle la méthode d'instance ditMiaou() de ChatEnrhume.

Qu'affiche ce programme ?
  1. Le programme ne compile pas
  2. Miaou!
  3. MiaouTchoum!
  4. Le programme compile, mais se termine sur une erreur
Le programme ne compile pas puisqu'un Chat n'est pas du type ChatEnrhume (l'affectation ChatEnrhume chat = new Chat() est incorrecte).

Qu'affiche ce programme ?
  1. Le programme ne compile pas
  2. Miaou!
  3. MiaouTchoum!
  4. Le programme compile, mais se termine sur une erreur
Le programme compile car on transtype explicitement le Chat en ChatEnrhume (downcast) dans ChatEnrhume chat = (ChatEnrhume)new Chat(). En revanche, à l'exécution, le programme génère une erreur car un Chat n'est toujours pas un ChatEnrhume.

Qu'affiche ce programme ?
  1. Maiou! 0
  2. Miaou! 42
  3. MiaouTchoum! 0
  4. MiaouTchoum! 42

Miaou! 0. La figure illustre l'état d'un Chat et d'un ChatEnrhume. Dans notre exemple, chat est un ChatEnrhume, mais ChatEnrhume ne surdéfinit pas ditMiaou() (ChatEnrhume ne définit que la méthode ditAtchoum()). L'exécution de chat.ditMiaou() effectue donc un appel au ditMiaou() de Chat. Ensuite, la portée lexicale des champs et variables nous dit que le x utilisé dans le constructeur de ChatEnrhume est celui de ChatEnrhume et non celui de Chat : le x de Chat conserve la valeur 0 après l'exécution du constructeur de ChatEnrhume. Dans chat.ditMiaou(), x vaut donc 0.

Un Chat et un ChatEnrhume.

Qu'affiche ce programme ?
  1. Le programme ne compile pas
  2. Miaou!
  3. MiaouTchoum!
  4. Le programme compile, mais se termine sur une erreur
Le programme ne compile pas. En effet, ChatEnrhume ne peut pas être une classe concrète puisqu'elle ne met pas en œuvre le ditAtchoum() abstrait de Chat : on ne peut donc pas instancier ChatEnrhume.