Commençons à utiliser Java. Je trouve beaucoup de similitudes avec .NET, mais je vois que toutes les méthodes en Java sont virtuelles par défaut. Donc la question est ce que je peux faire pour les rendre non virtuel? Le mot-clé final
est-il la bonne solution?Méthodes non virtuelles en Java
Répondre
Oui, ou privé
Mais 'private' - tout comme dans .net - rend la méthode indisponible pour les autres classes à appeler, tout en empêchant le dépassement. –
Mais que puis-je faire quand j'ai besoin d'avoir une méthode dans la classe enfant avec le même nom que dans la classe parent. En C# il y a un mot-clé nouveau pour de tels cas ... y a-t-il quelque chose de similaire en Java. – NixDev
non, rien du tout –
Au lieu de définir toutes les méthodes que finale, vous pouvez également définir la classe entière comme définitive. Je ne dis pas si ce style est bon ou mauvais.
Si vous souhaitez que la méthode ne soit pas virtuelle pour les performances, laissez le JIT s'occuper de cela jusqu'à ce que vous ayez la preuve qu'il ne fonctionne pas. Si la raison de rendre la méthode non-virtuelle est de pouvoir la définir dans une sous-classe mais pas de polymorphisme, vous êtes probablement en train de sous-classer sans raison réelle (postez plus de code si vous souhaitez la contester).). Si c'est pour le design, je suggère de faire la classe finale plutôt que des méthodes individuelles si possible. IDEA a de bonnes inspections pour la conception de classe. Essayez de ne pas trop écouter ceux qui veulent que vous laissiez tout ouvert afin qu'ils puissent sous-classer les bogues ou les limitations; ils vous crient encore plus fort quand vous cassez accidentellement leur sous-classe.
Fournissez un moyen pour les clients d'ajouter leurs propres types plutôt que de sous-classer les vôtres et ils ne remarqueront probablement même pas que vos classes sont finales.
Rendre statique.
Si vous appelez une méthode non virtuelle, vous voulez savoir à partir de votre code quelle méthode de classe vous appelez. La faille de .net est que vous ne pouvez pas le savoir à partir de votre code.
Exemple
En Java si vous définissez ClassB comme
public class ClassB extends ClassA {
@Override
public void run() {
}
}
et l'objet
ClassA obj=new ClassB();
Si vous appelez obj.run() comment saurez-vous si ce code est suivant les règles de principe ouvert/fermé polymorphe ou codera-t-il la méthode liée à ClassA? En Java, vous saurez qu'il y a toujours du polymorphisme. Il est plus facile de faire des simulacres et il est plus facile d'étendre les classes et de suivre le principe de substitution de Liskov.
sur les autres méthodes statiques de main sont bornés à une classe, donc si vous voulez appeler une méthode qui est liée à ClassA vous pouvez définir cette méthode comme ceci:
public static run(ClassA obj)
et vous pouvez l'appeler avec
ClassB obj=new ClassB();
ClassA.run(obj);
et du code que vous saurez que la méthode que vous appelez est défini dans ClassA et non ClassB.
Non. Ne pas rendre une méthode statique lorsqu'elle appartient à l'objet. C'est vraiment un mauvais design. – Cephalopod
- 1. nhibernate méthodes virtuelles & resharper
- 2. Décorateurs et méthodes virtuelles
- 3. Comment les méthodes virtuelles fonctionnent en C#?
- 4. Redéfinition de méthodes virtuelles pures en C++
- 5. Ramifications de méthodes/propriétés virtuelles
- 6. Se moquer des méthodes non-virtuelles en C++ sans éditer le code de production?
- 7. méthodes virtuelles et classes de modèles
- 8. Méthodes virtuelles en tant que fonction Comp pour trier
- 9. C++: les classes dérivées et des méthodes virtuelles
- 10. types de retour génériques de méthodes abstraites/virtuelles
- 11. Méthodes et threads en Java
- 12. enums et méthodes génériques en Java
- 13. Réplication de session sur les machines virtuelles Java dans WebSphere
- 14. Méthodes polymorphes Java
- 15. fluentnhibernate et entités virtuelles
- 16. Comment trouver des fonctions virtuelles non définies d'une classe
- 17. Machines virtuelles préconfigurées?
- 18. Profiling méthodes natives en Java - résultats étranges
- 19. Méthodes refacturées et compatibilité binaire en Java
- 20. Comment cela fonctionnera-t-il? (interfaces et fonctions non virtuelles)
- 21. Java: `Méthodes static`
- 22. Méthodes de rappel Java
- 23. Méthodes non documentées: les utiliser ou non?
- 24. Implémentation de l'interface via différentes machines virtuelles Java
- 25. C#/Resharper 5 recherche structurelle, détecter et avertir si des méthodes publiques non virtuelles sur des classes avec certains attributs
- 26. Méthodes/variables d'injection: public ou non?
- 27. Convertir plusieurs méthodes Java pour les exécuter en tant que threads non bloquants?
- 28. Méthodes non liées dans Cheetah
- 29. fonctions virtuelles objet Slicing
- 30. Java classes et méthodes Question
http://download.oracle.com/javase/tutorial/java/IandI/final.html –
Devinez quoi, j'ai trouvé dans 'C# .NET' beaucoup de similitudes avec' JAVA' ... comme je l'ai quelques similitudes avec mon père ... –
@Garis Ne peut pas obtenir votre point ... Comment il est connecté à la question? – NixDev