title: Force subclass to implement abstract override method
body: <p>I have an abstract class with some abstract methods that subclasses need to implement.</p>
  <pre class="lang-dart prettyprint-override"><code>abstract class BlockData {
    Widget build();
  
    BlockData get value;
  }
  
  class NumberData extends BlockData {
  
    NumberData(Function updateCallback) : super(updateCallback);
  
    // trying to remove either of the below methods throws a compiler error as expected
    @override
    BlockWidget build() {
      // TODO: implement build
      throw UnimplementedError();
    }
  
    @override
    BlockData get value =&gt; this;
  }
  </code></pre>
  <p>As expected, my subclass is forced to implement them. However, I also want to force my class to implement a custom <code>==</code> and <code>hashcode</code> method. When I override these methods in my abstract class with an abstract implementation, they are completely ignored and the subclass is allowed to not implement them.</p>
  <pre class="lang-dart prettyprint-override"><code>abstract class BlockData {
    Widget build();
  
    BlockData get value;
  
    @override
    bool operator ==(other);
  
    @override
    int get hashCode;
  }
  
  // this should throw an error since it doesn't implement == or hashcode, but it doesn't
  class NumberData extends BlockData {
  
    NumberData(Function updateCallback) : super(updateCallback);
  
    @override
    BlockWidget build() {
      // TODO: implement build
      throw UnimplementedError();
    }
  
    @override
    BlockData get value =&gt; this;
  }
  </code></pre>
  <p>This is different from the behavior in Java, where you can make an abstract method that overrides a superclass and force a subclass to have a custom implementation. Is there any way to force this in Dart, and for that matter, is this expected behavior?</p>