web-dev-qa-db-fra.com

Pourquoi "étend" précède "implémente" dans la déclaration de classe

Pourquoi implement doit-il toujours être écrit après extend dans une déclaration de classe? Par exemple:

public class Register extends ActionSupport implements ModelDriven

Pourquoi cela ne peut-il pas être:

public class Register implements ModelDriven extends ActionSupport 

Ce dernier produit une erreur de compilation.

42
lzjun

Lorsque le compilateur Java transforme une classe en bytecode, il doit d'abord rechercher une classe parente. En effet, l'implémentation sous-jacente des classes doit pointer vers le bytecode de la classe parente - qui contient le Il ajoute ensuite des pointeurs au code des fonctions de la classe enfant - dont certaines sont mandatées par le mot clé "implements".

Parce que la classe parente doit être compilable, il est plus facile si le compilateur sait d'avance ce qu'est cette classe. De plus, vous ne pouvez étendre qu'une seule classe mais implémenter un nombre illimité d'interfaces. Le temps de compilation grimpe si le mot-clé extend peut être mélangé entre un certain nombre d'instructions implements. Les compilateurs veulent échouer le plus rapidement possible pour réduire le temps de développement, ce choix est donc logique. De plus, cela vous aide à penser clairement à la classe pour la même raison.

86
Nathaniel Ford

Probablement pour faciliter le travail du compilateur. C'est juste une convention. Il n'y a aucun avantage à pouvoir réorganiser ces choses.

C'est comme demander pourquoi Java ne sont pas écrites en notation de pré-commande comme public int (int a, int b)add{ return a+b; }.

5
trutheality