public
et package
.public
permet à une classe d'être visible dans tout le code sans aucune restriction.public
, de l'instancier, et de la spécialiser (héritage).public class MyPublicClass {}
package
permet à une classe d'être visible à l'intérieur de son package uniquement.package
.package com.mtitek.modifiers; class MyDefaultClass {}
abstract
:final
.public abstract class MyAbstractClass {}
final
:final
empêche une classe d'être héritée, ce qui veut dire que son comportement ne peut être modifié.final
ne peut pas utiliser le modificateur abstract
.public final class MyFinalClass {}
Les classes ne peuvent pas être private
.
Vous obtiendrez une erreur de compilation si vous marquez une classe private
.
public
et package
.public
permet à une interface d'être visible dans tout le code sans aucune restriction.public
et de la spécialiser (héritage).public interface MyPublicInterface {}
package
permet à une interface d'être visible à l'intérieur de son package uniquement.package
.package com.mtitek.modifiers; interface MyDefaultInterface { }
abstract
:abstract
.public abstract interface MyAbstractPublicInterface {}
Les interfaces ne peuvent pas être private
.
Vous obtiendrez une erreur de compilation si vous marquez une interface private
.
Les interfaces ne peuvent pas être final
.
Vous obtiendrez une erreur de compilation si vous marquez une interface final
.
Les variables des interfaces sont implicitement public
, static
, et final
.
Ce qui veut dire, qu'il n'est pas nécessaire d'utiliser ces modificateurs pour la déclaration des variables des interfaces.
Mais il est interdit d'utiliser un autre modificateur.
Les méthodes des interfaces sont implicitement public
et abstract
.
Ce qui veut dire, qu'il n'est pas nécessaire d'utiliser ces modificateurs pour la déclaration des méthodes des interfaces.
Mais il est interdit d'utiliser un autre modificateur.
public
, private
, protected
, et package
.public
permet à une méthode d'être accessible dans tout le code sans aucune restriction (à condition que la classe qui la déclare est visible elle aussi).private
permet à une méthode d'être accessible uniquement dans le code de la classe qui la déclare.private
n'empêche pas une sous-classe de déclarer une méthode avec exactement la même signature, dans ce cas, on ne parle pas de redéfinition de la méthode (héritage)
mais plutôt d'une nouvelle définition de la méthode puisque celle de la superclasse est non visible pour la sous-classe.protected
permet à une méthode d'être visible à l'intérieur du package de la classe qui la déclare.package com.mtitek.inheritance.package1; public class MyParentClass { protected void doFirstThing() { // ... } protected void doSecondThing() { // ... } }
package com.mtitek.inheritance.package2; import com.mtitek.inheritance.package1.MyParentClass; public class MySubClass extends MyParentClass { @Override protected void doFirstThing() { super.doFirstThing(); } public void doThirdThing() { doFirstThing(); // OK doSecondThing(); // OK MyParentClass myParentClass = new MyParentClass(); myParentClass.doFirstThing(); // Compiler error : The method doFirstThing() from the type MyParentClass is not visible } }
package
permet à une méthode d'être visible uniquement à l'intérieur du package de la classe qui la déclare.package
.T
qui déclare des méthodes avec les modificateurs d'accès
public
,
private
,
protected
,
et package
) :Visibilité des méthodes de la classe T |
public |
private |
protected |
package |
---|---|---|---|---|
Dans le code de la classe T |
Oui | Oui | Oui | Oui |
Dans le code de n'importe quelle classe (autre que la classe T ) appartenant au même package de la classe T |
Oui | Non | Oui | Oui |
Dans le code de n'importe quelle classe (pas sous-classe) appartenant à un package différent de celui de la classe T |
Oui | Non | Non | Non |
Dans le code de n'importe quelle sous-classe appartenant au même package de la classe T |
Oui | Non | Oui | Oui |
Dans le code de n'importe quelle sous-classe appartenant à un package différent de celui de la classe T |
Oui | Non | Oui | Non |
static
:abstract
:public
, protected
, et package
.final
, private
, et static
.public abstract class MyAbstractClass { public abstract void doSomeThing(); }
final
:final
empêche une méthode d'être redéfinit ; ce qui veut dire que son comportement ne peut être modifié (héritage).public class MyClass { public final void doSomeThing() { // add code here } }
synchronized
:synchronized
permet à une méthode d'être exécuter par un seul thread à la fois.public class MyClass { public synchronized void doSomeThing() { // add code here } }
strictfp
:strictfp
permet à une méthode d'être conforme avec le standard concernant la gestion des nombres réels.strictfp
to enforce that all instructions (within a method or a class) use the strict floating point computations.StrictMath
(instead of Math
)
if results are expected to be the same regardless of the processor used to execute the mathematical functions
(this might have an impact on performance though).public class MyClass { public strictfp void doSomeThing() { // add code here } }
native
:native
indique que la méthode est implémenter dans un autre langage (exemple C++).public class MyClass { public native void doSomeThing(); }
final
.public
, private
, protected
, et package
.public
permet à une variable d'être accessible dans tout le code sans aucune restriction, du moment où la classe qui la déclare est visible elle aussi.private
permet à une variable d'être accessible uniquement dans le code de la classe qui la déclare.protected
permet à une variable d'être visible à l'intérieur du package de la classe qui la déclare.package com.mtitek.inheritance.package1; public class MyParentClass { protected Integer var1; }
package com.mtitek.inheritance.package2; import com.mtitek.inheritance.package1.MyParentClass; public class MySubClass extends MyParentClass { public void doSomeThing() { var1 = 10; // OK MyParentClass myParentClass = new MyParentClass(); myParentClass.var1 = 10; // Compiler error : The field MyParentClass.var1 is not visible } }
package
permet à une variable d'être visible uniquement à l'intérieur du package de la classe qui la déclare.package
.static
:static
implique que la variable aura une seule copie (classe copie) qui sera partagée par toutes les instances de la classe.final
:final
empêche la modification de la référence contenue dans une variable
(s'applique aux variables de classe, variables de d'instance, variables locales des méthodes, et paramètres de méthodes).public class MyClass { public final static Integer ADD_OPERATION_ID = 0; }
transient
:transient
indique que la variable ne doit pas être prise en compte lors de la sérialisation de l'objet qui définit cette variable.volatile
:volatile
permet aux threads de voir la dernière valeur modifiée de la variable
(une sorte de synchronisation sans la charge supplémentaire du verrouillage).