Question

Les instructions disent: Créer une méthode equals qui prend une référence d'objet et renvoie true si l'objet donné est égal à cet objet.  * Astuce: Vous aurez besoin 'instanceof' et à un casting (Position)

Je:

class Position {

    private double x,y;
    private int id;

public boolean instanceOf(Object a)
    {
        boolean isInstance;
        if ((Position)a instanceof Position)
            isInstance=true;
        else
            isInstance=false;
        return isInstance;
    }

Mais je le fais mal, et je ne sais pas ce que mon problème. Je suis nouveau à des objets si ce genre est de me confondre ..

Était-ce utile?

La solution

Comme il est une question de devoirs, je ne vais pas donner une réponse détaillée. Vous devez mettre en œuvre une méthode equals(), pas une méthode de instanceOf(). Je pense que cette aide du lien:

L'exemple de code devraient être suffisantes. Redemander si vous avez besoin de plus indice.

Autres conseils

Il a dit clairement créer une méthode de equals(), et vous l'avez obtenu ici aussi. Mais même après tout ce que vous avez créé une méthode nommée instanceOf(). Pourquoi?

De plus, vous pouvez obtenir un ClassCastException sur cette ligne, dans le cas où un autre type d'objet est passé.

    if ((Position)a instanceof Position)

Ce qui signifie précisément que vous devriez jeter seulement le object à Position, après s'être assuré que le object passé est de type Position. Ce qui signifie maintenant son bon d'aller plus loin avec la comparaison. Si son pas de type Position en premier lieu, alors pourquoi devrait vous déranger comparer davantage. Parce qu'il ne peut jamais être égale. J'espère que vous obtenez mon point.

[Modifié pour répondre à la question dans le commentaire]

Eh bien, l'instance réelle devrait être de position de type. Une fois que nous savons que son de type position en utilisant instanceof opérateur, nous savons que son coffre-fort de le jeter à taper Position du type Object. Maintenant, la question est pourquoi nous avons besoin de casting? Parce que d'abord l'instance était de type objet, et nous ne savions pas sur le type réel. Vous savez peut-être que Java, vous pouvez attribuer tout type type d'objet, parce que l'objet est un parent de chaque classe en Java. Par conséquent, avant d'appliquer instanceof nous ne savions pas sur le type d'instance.

Dans le cas, vous ne chassez pas, vous ne serez jamais en mesure d'accéder à ses propriétés, à savoir, x, y et id. Vous pouvez essayer d'accéder à l'un de ces objets sur réelle sans la coulée. Vous saurez que vous ne pouvez pas. Par conséquent, vous ne pouvez pas comparer les deux. Je l'espère, cela a clairement indiqué.

Même si le Object a est d'un type de Position, mais il est défini comme type Object. Pour accéder aux propriétés de Position a, nous devons Object a coulé à l'aide Position p

Position p = (Position)a; 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top