问你们一个问题,假如两个不同的接口中都有一个名字相同、参数相同(包括个数和类型)、不同返回类型的方法,现在有我有一个类要实现这两个接口,那么我该怎么实现呢!这是我做的测试: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();
                     ^

解决方案 »

  1.   

    大哥,貌似你的测试类里没有main方法啊
      

  2.   

    下面的你跑下开看,真的是没有main啊。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){
    ImplAB ab=new ImplAB(); 
    int a=1; 
    ab.m(a); 
    ab.am(); 
    ab.bm(); 
    }
      

  3.   

    先说你上面的测试程序:
    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(); 

      

  4.   

    再说一下楼主的问题:
    假如两个不同的接口中都有一个名字相同、参数相同(包括个数和类型)、不同返回类型的方法,现在有我有一个类要实现这两个接口,那么我该怎么实现呢!如果两个不同的接口中的方法的名字,参数个数和类型都相同,但返回类型不同
    要时用两个方法来分别实现,编译时会出现错误:提示你这个函数已经被定义。如果你只用一个方法来实现,也会出现编译错误,因为有一个接口的abstact方法没有被实现。
      

  5.   

    把测试代码发给你吧!
    我再上面的代码基础上修改的
    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(); 

      

  6.   

    当然也有特殊情况:
    比如:
    A接口的方法返回Animal
    A接口的方法返回Dog类型,
    而Dog继承自Animal你在实现时只需返回Animal就可以了(这是协变式返回)
    也就时说你的返回类型是继承关系时,你可以返回父类就可以了,不能返回子类。
    因为子类IS-A父类,而反过来不成立
      

  7.   

    关于main方法,我忘记粘贴了,不过你们可以想象啊,我不会那么弱智测试都不用main方法的!