Question: As we use "default" keyword as a access specifier, and it can be used in switch statements as well with complete different purpose, So i was curious that is there any other keywords in java which can be used in more then one purposes

Answer: 
Something no one else has mentioned yet: the **class** keyword has two different uses.

Declaring a class:

```
class Test{};

```

and indicating a class literal:

```
Class<Test> testClass = Test.class;

```
The "extends" keyword can be for single inheritance (either implementation or "pure abstract class" aka "interface inheritance" in Java).

The "extends" keyword can also be used for multiple (interface) inheritance.

The ones who always argue that Java doesn't support multiple inheritance will hence have a hard time arguing that "extends" in those two cases is doing exactly the same thing.

Now I'm in the other camp: I consider that multiple interface inheritance is multiple inheritance and that implementation inheritance is just an OOP detail (that doesn't exist at the OOA/OOD level) and hence I consider that "extends" is really doing the same thing in both case and that hence my answer doesn't answer the question :)

But it's an interesting keyword nonetheless :)