<p>Consider the following interface in Java:</p>

<pre><code>public interface I {
    public final String KEY = "a";
}
</code></pre>

<p>And the following class:</p>

<pre><code>public class A implements I {
    public String KEY = "b";

    public String getKey() {
        return KEY;
    }
}
</code></pre>

<p>Why is it possible for class A to come along and override interface I's final constant?</p>

<p>Try for yourself:</p>

<pre><code>A a = new A();
String s = a.getKey(); // returns "b"!!!
</code></pre>

You are hiding it, it's a feature of "Scope".  Any time you are in a smaller scope, you can redefine all the variables you like and the outer scope variables will be "Shadowed"
By the way, you can scope it again if you like:
```
```
public class A implements I {
    public String KEY = "b";

    public String getKey() {
        String KEY = "c";
        return KEY;
    }
}
```
```
Now KEY will return "c";
Edited because the original sucked upon re-reading.