Super-classe de référence à la sous-classe d'objets montrant même comportement que sous-classe de référence à la sous-classe de l'objet

Le code suivant dans java, lorsqu'il est exécuté sur elipse, donne le même résultat, même si nous remplaçons

superclass s=new sub();

avec,

sub s= new sub();

Noter que nous disposons de méthodes de remplacement.

De sortie est:

changed supermethod in sub class
num is sub class 5

Code:

public class superclass {
    int num=2;
    public static void main(String str[]){
        superclass s=new sub();
        //HERE: nothing changes if we write, sub s=new sub();
        s.supermethod();
        s.method();
    }
    void supermethod(){
        System.out.println("supermethod as in superclass");
    }
    void method(){
        System.out.println("num in superclass "+num);
    }
}
class sub extends superclass{
    int num=5;
    void method(){
        System.out.println("num is sub class "+num);
    }
    void supermethod(){
        System.out.println("changed supermethod in sub class");
    }
}

S'il vous plaît signaler, ce sont les différences dans la création d'une sous-classe de l'objet de ces deux manières. Et il n'y aura aucune différence dans l'accès aux méthodes et variables?
(notre java professeur dit, l'accès à la méthode et variables seront différentes dans les deux cas)

Aussi, ce qui se passe pour les méthodes statiques, comme principal. Difficile je sais que c'est héréditaire, mais quelqu'un peut-il mettre en évidence son comportement dans les sous-catégories?

  • Vous déclarez le type de superclass mais dans les deux cas, l'objet de le créer est un sub. Lorsque vous appelez les méthodes, puisque les sous a ces méthodes, ils sont appelés à la place de la super-classe. Mettre une méthode dans superclass de ne pas les remplacer sous, puis l'appeler, dans ces deux exemples pour voir la différence.
  • Veuillez commencer avec un capital de lettres pour nommer les classes: Superclass (ou SuperClass) et Sub