As you might have tested out already, removing the declaration in the abstract class produces no error. It can be safely removed.
If I were to speculate the reasons for this redundant line of code, one reason would be making it easier for subclasses of Test
to implement the methods required.
Imagine you are trying to write a Test
subclass and the line in question were not there. You go to the definition of Test
to find what methods to implement, but you find nothing. You'd have to fo to Inter
to see what methods you need to implement. Now imagine the chain of inheritance going much deeper. Do you see how many layers of classes you have to look through to see what methods to implement?
However, these kind of problems can be avoided by using a modern IDE like IntelliJ. It tells you what methods you need to implement automatically.
When I declare the 'abstract public void show();' in the abstract class Test does that create a brand new show() method or just refer to the show() method declared in the interface Inter? Please clarify.
That does not create a new method (no hiding). It overrides the method declared in Inter
. Here's a screenshot of IntelliJ:

The little "O" with an upwards arrow indicates overriding.