2008-03-14

public class Main {
    public static void main( String[] args ) {
        // ( 5 - 3 ) + 1
        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;
    }

}

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん