Ecco quello che ho fatto.. Ho creato due classi astratte per specificare il tipo Espressione ed EspressioneAritmetica..
codice:
public class OperatoreNumerico extends EspressioneAritmetica { Espressione left; Espressione right; Espressione root; public OperatoreNumerico() { left = null; right = null; } public OperatoreNumerico(String s) { if (s.equals("+")) root = new PLUS(); if (s.equals("-")) root = new MINUS(); if (s.equals("*")) root = new MUL(); if (s.equals("/")) root = new DIV(); if (s.equals("^")) root = new POWER(); if (s.equals("%")) root = new REM(); } public Espressione getRoot() { return root; } public void setLeft(Espressione e) { if (!(e instanceof EspressioneAritmetica)) { System.out .println("Ad un operatore aritmetico possono essere assegnati solo espressioni aritmetiche"); return; } left = e; } public void setRight(Espressione e) { if (!(e instanceof EspressioneAritmetica)) { System.out .println("Ad un operatore aritmetico possono essere assegnati solo espressioni aritmetiche"); return; } right = e; } public Espressione getLeft() { return left; } public Espressione getRight() { return right; } public class POWER extends OperatoreNumerico { public String toString() { return left.toString() + " ^ " + right.toString(); } } public class MUL extends OperatoreNumerico { public String toString() { return left.toString() + " * " + right.toString(); } } public class DIV extends OperatoreNumerico { public String toString() { return left.toString() + " / " + right.toString(); } } public class PLUS extends OperatoreNumerico { @Override public String toString() { return left.toString() + " + " + right.toString(); } } public class MINUS extends OperatoreNumerico { public String prova() { return "maria"; } @Override public String toString() { return left.toString() + " + " + right.toString(); } } public class REM extends OperatoreNumerico { public String toString() { return left.toString() + " % " + right.toString(); } } }
e questo è il main dove richiamo il toString:
codice:
OperatoreNumerico plus = new OperatoreNumerico("+"); Numero n1 = new Numero(5); Numero n2 = new Numero(3); plus.setLeft(n1); plus.setRight(n2); System.out.println(plus.toString());
L'errore è sempre lo stesso..