9
votes

Quelle est la différence entre les structures C et les classes Java?

Je suis un débutant à Java, mais un peu familier à C. Je voulais savoir - quelles différences existe-t-il entre les structures C et les objets Java et invoquant leurs méthodes? Ou sont l'équivalent totalement équivalent?

Par exemple, la structure de vélo: xxx

La raison pour laquelle je demande est parce qu'ils ont l'air si semblable! Merci!


0 commentaires

4 Réponses :


5
votes

C struct ne peut pas avoir de méthodes / fonctions dedans. Ce n'est qu'une collection de types de données différents. classe peut avoir à la fois des variables et des méthodes déclarées.


2 commentaires

De plus, une structure ne peut pas hériter d'une autre structure.


@Chris - Bon point. C n'a aucun concept d'héritage cependant. Vous auriez dû le poster comme une réponse à la place.



1
votes

Les différences clés, IMHO sont que les classes permettent


1 commentaires

Vous avez oublié le plus important: héritage ( en.wikipedia.org/wiki/Inheritance_ ( objet-orienté_programm ing) )



17
votes

Si vous laissez la méthode sur la photo de l'image, vous pouvez penser aux classes et méthodes Java en tant que paire d'un struct code> et d'un ensemble de fonctions qui fonctionnent sur ces struct code> s. Par exemple, si vous avez une classe comme celle-ci:

myJavaClass->vtable->getX(myJavaClass);


0 commentaires

2
votes

Une classe Java vous permet de définir des champs, comme une structure C, mais dispose des caractéristiques supplémentaires suivantes:

  • Lorsque vous indiquez dans votre question, vous pouvez ajouter des méthodes à une classe pouvant fonctionner sur les données.
  • Vous pouvez déclarer à la fois des champs et des méthodes privé (et quelques autres paramètres d'accès), ce qui signifie que seules d'autres méthodes de la classe peuvent y accéder, pas de code de l'extérieur. (Il ne serait pas de sens d'avoir ceci sur les structures, car il n'y aurait aucun moyen d'accéder aux champs privés - cela n'a de sens que lorsque vous autorisez des méthodes).
  • Les classes peuvent hériter d'autres classes. Entre autres choses, cela vous permet de passer un objet de type B où un type A était attendu, tant que B hérite d'un.

    Il y a une autre différence subtile. Dans C, les structures sont types de valeur mais en Java, les classes sont types de référence . Cela signifie que lorsque vous copiez une structure en C (telle que l'attribution à une variable ou en passant comme un argument), il obtient tous ses champs copiés, alors que dans Java, lorsque vous copiez un objet de classe, il suffit de copie la référence à l'objet (donc si vous modifiez ses champs, vous modifiez également l'objet d'origine, pas seulement la copie).

    en C, vous utilisez souvent pointeurs sur les structures pour imiter le comportement de référence de Java. En Java, vous n'utilisez pas de pointeurs car les objets de classe sont déjà des références.


0 commentaires