Why can I access Object's method via an Interface that doesn't define them?
<p>Given the following interface and implementation class:</p>

<pre><code>public interface MyInterface {
  public String getSomething ();
}

public class MyImplementation implements MyInterface {

   @Override
   public String getSomething () {
      return "Someting";
   } 

   public String getOtherThing () {
      return "otherThing";
   }
}
</code></pre>

<p>And then some client code:</p>

<pre><code>MyInterface objectViaMyInt = new MyImplementation();

objectViaMyInt.getSometing();   //WORKS, OF COURSE
objectViaMyInt.getOtherThing(); //DOESNT WORK, OF COURSE
objectViaMyInt.toString();      // WORKS TOO
</code></pre>

<p>So, I think I understand the spirit of this . .. every object is an Object and should inherit those essential methods.  But how does this actually work?  It seems that it can't follow the normal rules for inheritance and interface ( type ) based access . . .</p>
