Here is the scenario:-
class Canine{
public void roam(){
System.out.println("Canine-Roam");
}
}
public interface Pet{
public abstract void roam();
}
class Dog extends Canine implements Pet{
public void roam(){
System.out.println("Dog Roam");
}
public static void main(String [] args){
Dog adog = new Dog();
adog.roam();
}
}
I am aware that JVM must not have any confusion in choosing which method to run, that means, which method gets over-ridden. But I am confused anyway. Why does this program compile?
No – the same method cannot exist in a class twice.
An interface simply declares a requirement for a class to implement a particular method. It does not actually create that method.
So a class that acquires a method implemention through inheritance has that method defined. This (single) implementation satisfies the interface’s requirements.
In your case:
DogextendsCanine, so it means that theroam()method fromCanineis available, and would be exposed as a method on Dog objects if not overridden.Dogthen overrides the superclass’ method with its own definition ofroam(). This is allowed, and there is still just one unambiguous method calledroam()onDog– the new override.DogimplementsPet, which means it is required to have aroam()method. It does – so it’s a valid implementation of this interface.