public abstract class Condition_Action_Table_with_State extends Condition_Action_Table {

        // Inherited from Condition_Action_Table class
        /*
                protected Rule[] conditionActionRules;
        */

        protected State state;

        public Condition_Action_Table_with_State(Rule[] r, State s) {
                super(r);
                state = s;
        }

        public State getState() { return state }

        // Inherited from Condition_Action_Table class
        /*
                public Condition_Action_Table (Rule[] r) {
                        conditionActionRules = r;
                }

                public Rule ruleMatch(Condition c) {
                        for (int i=0; i<conditionActionRules.length; i++)
                        if (c.matches(conditionActionRules[i].fetchCondition()))
                            return conditionActionRules[i];
                        return null;
                }

                // No updates - inherited
                public void update (Percept p) {};
                public void update (Action a) {};
        */

        public abstract Rule ruleMatch(State);

        // Overriding of public void update (Percept p)
        public void update (Percept p) {
                state.update(p);
        }

}