Two interfaces with same methods having same signature but different return types
Last Updated :
17 Apr, 2019
Java does not support multiple inheritances but we can achieve the effect of multiple inheritances using interfaces. In interfaces, a class can implement more than one interface which can’t be done through extends keyword.
Please refer Multiple inheritance in java for more.
Let’s say we have two interfaces with same method name (geek) and different return types(int and String)
public interface InterfaceX
{
public int geek();
}
public interface InterfaceY
{
public String geek();
}
|
Now, Suppose we have a class that implements both those interfaces:
public class Testing implements InterfaceX, InterfaceY
{
public String geek()
{
return "hello" ;
}
}
|
The question is: Can a java class implement Two interfaces with same methods having the same signature but different return types??
No, its an error
If two interfaces contain a method with the same signature but different return types, then it is impossible to implement both the interface simultaneously.
According to JLS (§8.4.2) methods with same signature is not allowed in this case.
Two methods or constructors, M and N, have the same signature if they have,
the same name
the same type parameters (if any) (§8.4.4), and
after adopting the formal parameter types of N
to the type parameters of M, the same formal parameter types.
It is a compile-time error to declare two methods with override-equivalent signatures in a class.
interface bishal
{
public
void show();
}
interface geeks
{
public
int show();
}
class Test implements bishal, geeks
{
void show()
{
}
int show()
{
return 1 ;
}
public
static void main(String args[])
{
}
}
|
Output:
error: method show() is already defined in class Test
error: Test is not abstract and does not override abstract method show() in geeks
error: show() in Test cannot implement show() in bishal
interface InterfaceA
{
public
int fun();
}
interface InterfaceB
{
public
String moreFun();
}
class MainClass implements InterfaceA, InterfaceB
{
public
String getStuff()
{
return "one" ;
}
}
|
error: MainClass is not abstract and does not override abstract method fun() in InterfaceA
Share your thoughts in the comments
Please Login to comment...