title: Identify method's signature using inherited classes in Java's abstract methods
body: <p>I know this is a very simple question, but I have been working in Python for quite a long time and now that I must go back to Java, I seem to have problems <em>changing the chip</em> and wrapping my head around Java's basic polymorphism.</p>
  
  <p>Is it possible to overwrite (implement, to be precise) a class' <code>abstract</code> method in Java using one of the inherited classes as argument?</p>
  
  <p>Let me explain with a very simple example (following the <em>"almost official"</em> <a href="https://weblogs.java.net/blog/hellofadude/archive/2014/01/07/polymorphism-java" rel="nofollow">example</a> with shapes)</p>
  
  <pre><code>class Shape {}
  class Circle extends Shape {}
  class Triangle extends Shape {}
  
  abstract class ShapeDrawer {
      abstract void draw(Shape s); 
  }                       
  class CircleDrawer extends ShapeDrawer {
      void draw(Circle c){
          System.out.println("Drawing circle");
      }
  }
  </code></pre>
  
  <p>Is there any way of having Java identifying the <code>draw</code> method in the <code>CircleDrawer</code> class as the implementation of the abstract <code>draw</code> in <code>ShapeDrawer</code>? (The <code>Circle</code> class extends from <code>Shape</code> after all)</p>
  
  <p>Otherwise put: What I'd like is that the <code>draw</code> method of the <code>CircleDrawer</code> class accepts only instances of type <code>Circle</code>, but at the same time, I'd like to tell the Java compiler that the <code>void draw(Circle c)</code> is actually the implementation of the abstract method <code>abstract void draw(Shape s)</code> located in its parent class.</p>
  
  <p>Thank you in advance.</p>