Or in particular: What is the difference between
interface A {
void fa();
}
interface B extends A {
void fa();
void fb();
}
and
interface A {
void fa();
}
interface B extends A {
@Override
void fa();
void fb();
}
Does it effect the implementing class in any way?
Advertisement
Answer
No it should not. The class that implements interface B
will still have to provide an implementation of void fa();
regardless whether interface B annotates the same method signature with @Override
or not. Also, putting the @Override
annotation in interface B doesn’t make a lot of sense in this case because the annotation basically means that you are overriding the implementation that the super class gave to that method signature. Since Interface A
nor Interface B
provides an implementation to void fa()
it doesen’t make sense.
It would make sense if interface A
provided a default implementation to void fa()
For example:
interface A {
public default void fa(){
System.out.println("My default implementation");
}
}
In this case Interface B would be overriding the implementation given to fa()
from Interface A by making it abstract again. The same goes when Interface A defines fa()
as abstract and Interface B gives it an implementation by turning it into a default
method.