问你们一个问题,假如两个不同的接口中都有一个名字相同、参数相同(包括个数和类型)、不同返回类型的方法,现在有我有一个类要实现这两个接口,那么我该怎么实现呢!这是我做的测试:interface A{
void m(int arg);
void am();
}
interface B{
void m(int arg);
void bm();
}
class ImplAB implements A,B{
public ImplAB(){}
public void m(int arg){}
public void am(){}
public void bm(){}
}
public class TestInterface{
ImplAB ab=new ImplAB();
int a=1;
ab.m(a);
ab.am();
ab.bm();
}
输出output:E:\java\JAVA\javatest>javac TestInterface.java
TestInterface.java:18: 需要 <标识符>
ab.m(a);
^
TestInterface.java:18: 需要 <标识符>
ab.m(a);
^
TestInterface.java:19: 需要 <标识符>
ab.am();
^
TestInterface.java:20: 需要 <标识符>
ab.bm();
^
void m(int arg);
void am();
}
interface B{
void m(int arg);
void bm();
}
class ImplAB implements A,B{
public ImplAB(){}
public void m(int arg){}
public void am(){}
public void bm(){}
}
public class TestInterface{
ImplAB ab=new ImplAB();
int a=1;
ab.m(a);
ab.am();
ab.bm();
}
输出output:E:\java\JAVA\javatest>javac TestInterface.java
TestInterface.java:18: 需要 <标识符>
ab.m(a);
^
TestInterface.java:18: 需要 <标识符>
ab.m(a);
^
TestInterface.java:19: 需要 <标识符>
ab.am();
^
TestInterface.java:20: 需要 <标识符>
ab.bm();
^
void m(int arg);
void am();
}
interface B{
void m(int arg);
void bm();
}
class ImplAB implements A,B{
public ImplAB(){}
public void m(int arg){}
public void am(){
System.out.println("am...");
}
public void bm(){
System.out.println("bm...");
}
public static void main(String[] arg){
ImplAB ab=new ImplAB();
int a=1;
ab.m(a);
ab.am();
ab.bm();
}
}
interface A{
void m(int arg);
void am();
}
interface B{
void m(int arg);
void bm();
}
class ImplAB implements A,B{
public ImplAB(){}
public void m(int arg){}
public void am(){
System.out.println("am...");
}
public void bm(){
System.out.println("bm...");
}
public static void main(String[] arg){//错误地方,你没有main()加上,你再测试一下,是可以运行的
//没有了main()程序就找不到入口点
ImplAB ab=new ImplAB();
int a=1;
ab.m(a);
ab.am();
ab.bm();
}
}
假如两个不同的接口中都有一个名字相同、参数相同(包括个数和类型)、不同返回类型的方法,现在有我有一个类要实现这两个接口,那么我该怎么实现呢!如果两个不同的接口中的方法的名字,参数个数和类型都相同,但返回类型不同,
要时用两个方法来分别实现,编译时会出现错误:提示你这个函数已经被定义。如果你只用一个方法来实现,也会出现编译错误,因为有一个接口的abstact方法没有被实现。
我再上面的代码基础上修改的
interface A{
int m(int arg);//注意返回类型
void am();
}
interface B{
void m(int arg));//注意返回类型
void bm();
}
class ImplAB implements A,B{
public ImplAB(){}
//public int m(int arg){return arg;}
//你可以把上一行注释的代码去掉注释试一下
public void m(int arg){System.out.println("B.m(arg)");}
public void am(){
System.out.println("am...");
}
public void bm(){
System.out.println("bm...");
}
public static void main(String[] arg
ImplAB ab=new ImplAB();
int a=1;
ab.m(a);
ab.am();
ab.bm();
}
}
比如:
A接口的方法返回Animal
A接口的方法返回Dog类型,
而Dog继承自Animal你在实现时只需返回Animal就可以了(这是协变式返回)
也就时说你的返回类型是继承关系时,你可以返回父类就可以了,不能返回子类。
因为子类IS-A父类,而反过来不成立