Although the class `B` implements the interface `A`, it does not provide the implementation of the method `show()`. Again, `D` extends `C` but in class D the implementation of `displayNothing()` is the same as the implementation of `displayNothing()` method in its superclass `C`. 

But in both the cases `@Override` annotation work properly, why?

```
//code snippet 1
interface A
{
    void show();
}
abstract class B implements A
{
    @Override        
    abstract public void show(); 
}

//code snippet 2
class C
{
    void displayNothing()
    {
    }
}
class D extends C
{
    @Override
    void displayNothing()
    {
    }
}

```