2008-10-26 7 views
1

Disons que j'ai le code ruby ​​suivant:question sur les interfaces java


def use_object(object) 
    puts object.some_method 
end 

et, cela va fonctionner sur un objet qui répond à some_method, non?

En supposant que l'existence interface java suivante:


interface TestInterface { 
    public String some_method(); 
} 

Ai-je raison de penser que les interfaces sont la manière de Java pour réaliser la même chose (avec la seule différence que le type du paramètre serait TestInterface)?

Répondre

1

Vous avez raison, sauf que vous ne pouvez pas définir le corps d'une fonction dans Java Interfaces, uniquement des prototypes.

Les interfaces sont le seul moyen d'implémenter une pseudo-dérivation multiple en Java, puisque la dérivation de classe normale n'est que simple (un seul parent).

0

Les interfaces Java définissent les signatures de méthode qu'une classe d'implémentation doit fournir. Le JavaDoc explique tout cela dans les moindres détails.

0

En Java, les interfaces ne peuvent être utilisées que pour pour déclarer les méthodes, pas pour les définir (les implémenter). Seules les classes peuvent implémenter des méthodes. Mais les classes peuvent implémenter des interfaces. Ainsi, vous pouvez par exemple utiliser le motif Adaptateur pour réaliser la même chose que vous avez faite dans Ruby.

1

Non, les interfaces dans ne sont pas implémentées. Vous pouvez cependant en avoir plusieurs implémentations.

Une interface ressemblerait plus:

interface TestInterface { 
    public String some_method(); 
} 

Et il pourrait être mis en œuvre dans une classe:

public class TestClass implements TestInterface { 
    public String some_method() { 
     return "test"; 
    } 
} 

Et peut-être des classes plus qui mettent en œuvre cette méthode différemment. Toutes les classes qui implémentent une interface doivent implémenter les méthodes déclarées par une interface.

Avec les interfaces, vous ne pouvez pas obtenir exactement la même chose que dans votre exemple Ruby puisque Java est typé statique.

0

Oui, mais seulement si vous voulez exclure "tout ce qui a un some_method()" comme concept séparé. Si vous avez seulement une classe qui a some_method(), vous n'avez pas besoin de spécifier une interface, et le paramètre de use_object() sera cette classe. Notez également que Java utilise camelCase à la place des noms underscore_separated.

+0

Je voulais avoir le même nom pour la méthode dans les deux langues. – Geo

-1

Il semble que vous essayez de programmer en Ruby en utilisant Java, vous voulez repenser votre approche pour utiliser plus les idiomes de la langue.