Voici un extrait de mon codeAppel de la méthode parent à partir de la classe parente
package dictionary;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.regex.*;
public class IntelliCwDB extends CwDB {
public IntelliCwDB(String filename) {
super(filename);
}
@Override
public void add(String word, String clue) {
System.out.println("inelli");
}
}
Et CwDB ...
package dictionary;
import java.util.LinkedList;
import java.io.*;
import java.util.Scanner;
public class CwDB {
protected LinkedList<Entry> dict;
public CwDB(String filename) {
dict = new LinkedList<Entry>();
createDB(filename);
}
public void add(String word, String clue) {
System.out.println("cwdb");
dict.add(new Entry(word, clue));
}
protected void createDB(String filename) {
try {
BufferedReader f = new BufferedReader(new FileReader(filename));
while (f.ready()) {
this.add(f.readLine(), f.readLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Dans la partie main()
créer un nouvel objet IntelliCwDB
, qui tire la exécution de createDB()
. Le problème est que je veux CwDB.createDB()
pour utiliser sa propre méthode CwDB.add()
, pas celle de IntelliCwDB
. Existe-t-il une autre solution intéressante que de créer CwDB
séparément, puis de le passer dans le constructeur de IntelliCwDB
juste pour réécrire la base de données dict LinkedList<Entry>
?
Java est ambigu dans ce cas, à cause de ce que je comprends, le passage de CwDB.add() à IntelliCwDB.add() dans CwDB constructeur est fait en silence (ou pour être précis - le commutateur qui n'a pas encore été effectué). Ne vaut-il pas mieux désactiver complètement ces opérations? Sont-ils réellement utiles dans la programmation normale? – krzemian
Hmm .. Je ne suis pas sûr de ce que vous voulez dire. Le "switch" n'est jamais fait. Toutes les méthodes sont * toujours * virtuelles, depuis le début, même dans le constructeur. Qu'est-ce que vous suggérez de désactiver? Substitution de méthode? En C++, vous avez la possibilité de rendre une méthode non virtuelle (comme vous semblez vouloir dans ce scénario). Java a adopté une autre approche et a rendu toutes les méthodes virtuelles, sans avoir la possibilité de les désactiver. – aioobe