title: Wider argument types of overridding method in Java
body: <p>What OO principle is broken by the following code ? Not Java OO principle but general OO principle.</p>
  
  <pre><code>class GeneralArg{}
  class Arg extends GeneralArg{}
  
  class A{
      public void test(Arg a){}
  }
  
  class B extends A{
      @Override
      public void test(GeneralArg a){}
  }
  </code></pre>
  
  <p>I think this should work!</p>
  
  <p>However there is a compile error saying that <code>B.test()</code> doesn't override <code>A.test()</code></p>