Pourquoi puis-je jeter un objet? Peut-il être fait avec d'autres objets?

ErlichBachman:

Donc , j'écrivais une paintComponent(Graphics g)méthode et je me suis rendu au début que je CASTING à Graphics2D g2 = (Graphics2D) g;. J'ai écrit ce un code et il y a tout juste réalisé que je n'ai aucune idée ce que cela est. Je googlé un peu , mais la coulée d'objets est un peu étranger à moi.

Une référence d'objet peut être catalogué dans une autre référence d'objet. Ceci est appelé coulée objet.

Mot pour mot ^^ de mon manuel par Y. Daniel Liang

Je ne comprends pas pourquoi cela fonctionne. Graphicset Graphics2Dsont deux objets différents comment pourraient - ils hériter des variables d'instance et les méthodes de chaque-autre? De toute évidence , je suis au courant de la coulée primitive élargissement et à savoir le rétrécissement. Cela est logique puisque ce sont des classes juste wrapper de Integer, Double, Byte etc ...

dfritsi:

Avec coulée sans conversion d'objets ou de transformation de toute nature qui se passe. Imaginez que vous avez la structure de classe suivante:

class Mammal { }
class Human extends Mammal { }
class Dog extends Mammal { }

Maintenant , lorsque vous créez une nouvelle instance de l' homme avec Human human = new Human();qui sera également un mammifère, non? Ainsi , vous pouvez écrire une méthode comme:

public void doSoemthing(Mammal mammal) {
    if (mammal instanceof Human) {
        Human human = (Human) mammal;
        human.doWork();
    } else if (mammal instanceof Dog) {
        Dog dog = (Dog) mammal;
        dog.bark();
    }
}

et appeler la méthode comme:

doSomething(new Human());

Ainsi , votre méthode peut prendre tout type de mammifères comme paramètre d'entrée et dans votre méthode , vous pouvez vérifier quel genre de mammifères , il est vraiment. Ainsi , lorsque vous passez un new Human()comme l'entrée, le type réel de l'objet sera humain. La raison parce que vous pouvez passer un humain à une méthode qui attend un mammifère est parce que l' héritage. Alors , que votre méthode savoir est que le paramètre d'entrée est sans aucun doute un mammifère. Mais il peut être tout type de mammifères. Si vous voulez savoir quel type réel de l'objet est que vous pouvez utiliser instanceofpar exemple. Et dans cette ligne:

Human human = (Human) mammal;

ne signifie pas que vous êtes en train de convertir le paramètre d'entrée de mammifère. Cela signifie simplement que désormais vous voulez utiliser le paramètre d'entrée comme un être humain. Et vous pouvez le faire, parce qu'avec le isntanceof vous vérifiez qu'il est vraiment un être humain. Vous pouvez aussi faire quelque chose comme ceci:

public void doExample2(Object input) {
    if (input instanceof Integer) {
        System.out.println("I am a number");
    } else if (input instanceof Graphics) {
        System.out.println("I am a Graphics");
    }
}

Notez que le type de Teh paramètre d'entrée. Object est la classe de base de tout.

Donc, pour en revenir à votre scénario. Vous faites que la coulée, en raison du contexte de votre application, le paramètre d'entrée sera toujours un Graphics2D, et c'est la raison pour laquelle vous pouvez faire que la coulée, et aussi d'utiliser les méthodes fournies par Graphics2D.

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=478558&siteId=1
conseillé
Classement