title: Can omitting public abstract from interfaces harm bytecode compatibility?
body: <p>While browsing through SO questions, I came accross the definition of <code>Runnable</code>:</p>
  
  <pre><code>@FunctionalInterface
  public interface Runnable {
      /**
       * When an object implementing interface &lt;code&gt;Runnable&lt;/code&gt; is used
       * to create a thread, starting the thread causes the object's
       * &lt;code&gt;run&lt;/code&gt; method to be called in that separately executing
       * thread.
       * &lt;p&gt;
       * The general contract of the method &lt;code&gt;run&lt;/code&gt; is that it may
       * take any action whatsoever.
       *
       * @see     java.lang.Thread#run()
       */
      public abstract void run();
  }
  </code></pre>
  
  <p>As you can see, it has <code>public abstract</code> in the method definition, which are superfluous and, <em>as far as I know</em>, should not be included in method declarations.</p>
  
  <p>I expect the JDK team to have seen this and expect there to be a reason they are still here.</p>
  
  <p>Hence the question, can removing <code>public abstract</code> from interface declarations break bytecode compatability? Keep in mind that this <code>Runnable</code> technically still has to work even with code written using JDK1.0 java code.</p>