具有相同方法的两个接口具有相同的签名但不同的返回类型
Java不支持多重继承,但是我们可以通过接口实现多重继承的效果。在接口中,一个类可以实现多个接口,而这些接口不能通过 extends 关键字来实现。
有关更多信息,请参阅Java中的多重继承。
假设我们有两个接口具有相同的方法名称(geek)和不同的返回类型(int 和 String)
public interface InterfaceX
{
public int geek();
}
public interface InterfaceY
{
public String geek();
}
现在,假设我们有一个实现这两个接口的类:
public class Testing implements InterfaceX, InterfaceY
{
public String geek()
{
return "hello";
}
}
问题是:一个java类能否Java两个具有相同方法的接口,具有相同的签名但不同的返回类型?
不,这是一个错误
如果两个接口包含一个签名相同但返回类型不同的方法,则不可能同时实现这两个接口。
根据 JLS(§8.4.2),在这种情况下不允许使用具有相同签名的方法。
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.
在一个类中声明两个具有重写等效签名的方法是编译时错误。
// JAVA program to illustrate the behavior
// of program when two interfaces having same
// methods and different return-type
interface bishal
{
public
void show();
}
interface geeks
{
public
int show();
}
class Test implements bishal, geeks
{
void show() // Overloaded method based on return type, Error
{
}
int show() // Error
{
return 1;
}
public
static void main(String args[])
{
}
}
输出:
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
// Java program to illustrate the behavior of the program
// when two interfaces having the same methods and different return-type
// and we defined the method in the child class
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