Java Language Héritage statique


Exemple

La méthode statique peut être héritée de manière similaire aux méthodes normales, mais contrairement aux méthodes normales, il est impossible de créer des méthodes " abstraites " pour forcer la substitution de la méthode statique. Ecrire une méthode avec la même signature qu'une méthode statique dans une super classe semble être une forme de substitution, mais cela crée une nouvelle fonction qui cache l'autre.

public class BaseClass {
    
    public static int num = 5;

    public static void sayHello() {
        System.out.println("Hello");
    }

    public static void main(String[] args) {
        BaseClass.sayHello();
        System.out.println("BaseClass's num: " + BaseClass.num);
            
        SubClass.sayHello();
        //This will be different than the above statement's output, since it runs
        //A different method
        SubClass.sayHello(true);
        
        StaticOverride.sayHello();
        System.out.println("StaticOverride's num: " + StaticOverride.num);
    }
}

public  class SubClass extends BaseClass {
    
    //Inherits the sayHello function, but does not override it   
    public static void sayHello(boolean test) {
        System.out.println("Hey");
    }
}

public static class StaticOverride extends BaseClass {

    //Hides the num field from BaseClass
    //You can even change the type, since this doesn't affect the signature
    public static String num = "test";
        
    //Cannot use @Override annotation, since this is static
    //This overrides the sayHello method from BaseClass
    public static void sayHello() {
        System.out.println("Static says Hi");
    }

}

L'exécution de l'une de ces classes produit la sortie:

Hello
BaseClass's num: 5
Hello
Hey
Static says Hi
StaticOverride's num: test

Notez que contrairement à l'héritage normal, les méthodes d'héritage statiques ne sont pas masquées. Vous pouvez toujours appeler la méthode sayHello base en utilisant BaseClass.sayHello() . Mais les classes héritent des méthodes statiques si aucune méthode avec la même signature n'est trouvée dans la sous-classe. Si les signatures de deux méthodes varient, les deux méthodes peuvent être exécutées à partir de la sous-classe, même si le nom est identique.

Les champs statiques se cachent de la même manière.