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 unsub
. 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 danssuperclass
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
(ouSuperClass
) etSub
Vous devez vous connecter pour publier un commentaire.
En Java, toutes les méthodes statiques sont "virtuels", ce qui signifie qu'ils sont basés sur le moteur d'exécution type de l'objet sous-jacent plutôt que le type de la référence qui pointe vers l'objet. Par conséquent, il n'est pas question que le type que vous utilisez dans la déclaration de l'objet, le comportement sera le même.
Ce que la déclaration n'affecte pas, est que les méthodes qui sont visibles au moment de la compilation. Si
SubClass
a une méthode quiSuperClass
n' (appelonssubMethod()
), et de vous construire votre objetAlors vous aurez seulement être en mesure d'appeler des méthodes qui sont disponibles sur
SuperClass
. C'est, de tenter d'appelers.subMethod()
vous donnera une erreur de compilation. Mais, comme vous l'avez découvert, si les méthodes sont présents dansSuperClass
, mais remplacée parSubClass
, il sera la méthode de remplacement qui sera exécuté.Méthodes statiques, d'autre part, ne sont pas virtuels. L'exécution du code ci-dessous
imprime "SuperMethod". Vous devriez rarement de soins, cependant, que
static
méthodes sont non-virtuel parce que vous devriez ne jamais les appeler via un objet de référence, comme j'ai fait ci-dessus. Vous devriez les appeler par le nom de la classe:Je réécris ici votre code avec une certaine modification.
Veuillez regarder les changements.
Maintenant, lorsque vous créez un objet comme ceci:
Ensuite, vous pouvez appeler toutes les méthodes de remplacement comme
Dans ce cas, les méthodes de la sous-classe sera appelée.
vous pouvez aussi appeler des méthodes de la superclasse ceux qui ne sont pas écrasés comme
mais si vous essayez d'accéder à la méthode définie uniquement dans la sous-classe comme
alors il y aura une erreur de compilation.
Il est becoz s1 est de type super-classe.
Si vous voulez continuer à appeler la méthode dans la sous-classe, alors vous devez transtypage de s1 à la sous-classe comme
Après cela, vous pouvez appeler la méthode de la sous-classe.
Et si vous créez un objet comme
Ensuite, vous pouvez accéder à toutes les méthodes définies dans la sous-classe ou classe mère.
Le plus tôt la création de l'objet est essentiellement utilisé pour la mise en œuvre de "Moment de l'Exécution Ploymorphism".
J'espère que vous avez votre réponse.
vous créez l'Objet de sous et en l'assignant à super référence.si vous n'avez pas
1)premier cas:-
dans le cas ci-dessus, les méthodes de sous va être appelé, mais ces deux méthodes doivent être présents dans la superclasse aussi(si pas présent, alors erreur de compilation)
2)deuxième cas:-
dans cet aussi des méthodes de sous seront ,ces méthodes peuvent ou peuvent ne pas être super.
prenons un exemple:
le sup est une variable de référence pour la classe des objets. et sous est une variable de référence pour la classe B, les objets. supposons que B s'étend Un . donc, si nous écrivons "sup = sous", ou "sup = new B();" cette déclaration nous permet d'obtenir les attributs communs entre les 2 classes . j'.e : les attributs qui ont été héritées par B ... nous utiliser cette astuce pour vérifier les attributs hérités par B et ont été modifiés.