Casting de classe en java


Dans mon code, deux classes sont là, la sous-classe s'étend superclass.In la sous - classe i remplace la méthode de superclasse. Au moment de la création de l'objet, j'ai créé une référence de superclasse à l'objet de sous-classe qui fonctionne bien. Mais encore une fois, j'ai converti la référence de super classe en objet de super classe complet, mais il appelle la méthode de sous-classe et non la méthode de super classe. Mon hypothèse la sortie est fausse.Voici mon code

public class OverRiding {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //Super class reference to sub class Object
        Dog dog = new Animal();
        dog.eat();
        dog.bow();

        //Completely converted into pure Dog class Object
        Dog d = (Dog) dog;
        d.eat();
        d.bow();
    }
}

Classe de chien

class Dog {
    public void eat() {
        System.out.println("Dog eat Biscuits");
    }

    public void bow() {
        System.out.println("Dog bow");
    }
}

Animal de classe

class Animal extends Dog {
    public void eat() {
        System.out.println("Animal eat Food");
    }
}

Et ma sortie est

Animal eat Food
Dog bow
Animal eat Food
Dog bow
Author: Flakkenmarsh, 2013-10-10

5 answers

Votre concept n'est pas correct bro...

 class Animal extends Dog

Comment un animal peut-il étendre un chien? . C'est comme dire - "CHAQUE ANIMAL EST UN CHIEN" . Ce qui est faux... Donc, il devrait être dans l'autre sens...

Cet exemple ne fera que vous embrouiller davantage..

Donno pourquoi personne n'a évoqué cela...

 6
Author: TheLostMind, 2013-10-10 09:22:57
 Dog d = (Dog) dog;

Ici d n'est pas pur Dog objet. Il est toujours de type Animal. L'objet pur Dog serait créé via Dog d = new Dog().

 3
Author: RandomQuestion, 2013-10-10 08:51:01
   Dog dog = new Animal();
    //Completely converted into pure Dog class Object
    Dog d = (Dog) dog;

Les deux Dog et d pointent vers la même référence, Puisque vous ne créez pas de nouveau object. Le casting n'aura pas d'effet ici.

Le casting et la création sont complètement différents.

 2
Author: ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, 2013-10-10 08:52:40

Dans cet exemple, vous avez créé un objet, et c'est un Animal, (qui, malheureusement, est un type spécial de Dog). Lorsque vous appelez eat sur cet objet, vous obtiendrez toujours la version définie dans la classe Animal, pas la version définie dans la classe Dog.

C'est le polymorphisme. La version de la méthode appelée dépend de la classe de l'objet, pas du type de la variable qui lui fait référence.

 1
Author: Dawood ibn Kareem, 2013-10-10 08:51:44

Votre hypothèse est fausse:

Complètement converti en pur objet de classe de chien

Lorsque vous convertissez votre Animal en Dog, votre variable d est toujours un Animal. C'est aussi un Dog, mais le plus spécifique est de type Animal.

Vous n'êtes pas complètement converti votre variable en une autre instance. Votre instance est toujours la même.

Pour preuve, vous pouvez essayer ce code :

Dog d = (Dog) dog;
d.getClass(); // output Animal
 1
Author: Cyril Gandon, 2013-10-10 08:54:06