Le site final
Le mot-clé a plusieurs usages en Java. Il correspond à la fois au sealed
et readonly
en C#, en fonction du contexte dans lequel il est utilisé.
Classes
Pour empêcher la sous-classification (héritage à partir de la classe définie) :
Java
public final class MyFinalClass {...}
C#
public sealed class MyFinalClass {...}
Méthodes
Empêcher la surcharge d'un virtual
méthode.
Java
public class MyClass
{
public final void myFinalMethod() {...}
}
C#
public class MyClass : MyBaseClass
{
public sealed override void MyFinalMethod() {...}
}
Comme le souligne Joachim Sauer, une différence notable entre les deux langages ici est que Java marque par défaut toutes les méthodes non-statiques comme virtual
alors que C# les marque comme sealed
. Par conséquent, il suffit d'utiliser l'option sealed
en C#, si vous souhaitez empêcher la surcharge d'une méthode qui a été explicitement marquée virtual
dans la classe de base.
Variables
Pour permettre à une variable d'être assignée une seule fois :
Java
public final double pi = 3.14; // essentially a constant
C#
public readonly double pi = 3.14; // essentially a constant
À titre d'information, l'effet de la readonly
diffère de celui de la const
en ce sens que le readonly
est évaluée à temps de fonctionnement plutôt que temps de compilation ce qui permet des expressions arbitraires.
137 votes
Un commentaire en haut de la classe disant "Si vous outrepassez cette classe, vous êtes viré !". (bien sûr, c'est une blague :)