public class Main {
public static void main( String[] args ) {
Exp exp = new Add(new Sub(new Num(5), new Num(3)), new Num(1));
System.out.println(exp.eval());
}
}
抽象クラス
abstract class Exp {
public abstract int eval();
}
足し算
class Sub extends Exp {
左辺
private Exp hidari;
右辺
private Exp migi;
コンストラクタ
public Sub(Exp hidari, Exp migi){
this.hidari = hidari;
this.migi = migi;
}
評価
@Override
public int eval() {
return hidari.eval() - migi.eval();
}
}
引き算
class Add extends Exp {
左辺
private Exp hidari;
右辺
private Exp migi;
コンストラクタ
public Add(Exp hidari, Exp migi){
this.hidari = hidari;
this.migi = migi;
}
評価
@Override
public int eval() {
return hidari.eval() + migi.eval();
}
}
数
class Num extends Exp {
数
private int self;
コンストラクタ
public Num(int self) {
this.self = self;
}
評価
@Override
public int eval() {
return self;
}
}
ツイートシェア