title: In GoF Observer Pattern, why are the methods in derived class virtual?
body: <p>In GoF observer pattern, the <code>subject</code> is</p>
  <pre><code>class Subject {
    public:
      virtual ~Subject();
      virtual void Attach(Observer*);
      virtual void Detach(Observer*);
      virtual void Notify();
    protected:
      Subject();
    private:
      List&lt;Observer*&gt; *_observers;
  };
  </code></pre>
  <p>and the concrete subject <code>ClockTimer</code> is given as</p>
  <pre><code>class ClockTimer : public Subject {
    public:
      ClockTimer();
      virtual int GetHour();
      virtual int GetMinute();
      virtual int GetSecond();
      void Tick();
  };
  </code></pre>
  <p>I understand <code>Subject</code> is abstract therefore all methods are <code>virtual</code>. But why are the methods of <code>ClockTimer</code> virtual? It's not an abstract class after all.</p>