日期:2014-05-20  浏览次数:20788 次

求教java语法难题
有两个接口
    interface   A   {
          void   m();
    }
   
    interface   B   {
          int   m();
    }

有类实现两个接口
    class   T   implements   A,   B   {
          //   ?   怎么样写上面的两个   m()方法?   (注意返回值不一样)
    }

------解决方案--------------------
那就是重载方法了撒.
class T implements A, B {
void m();
int m();

}
------解决方案--------------------
楼上的不报错才怪 不能以返回类型区分方法!

T同时实现A, B 编译期出错
The return type is incompatible

------解决方案--------------------
mark
------解决方案--------------------
hehe ,只能说接口设计的不好了 :)
------解决方案--------------------
一定会出错了。
结构还是要重新设计啊。
------解决方案--------------------
lz重新设计吧。

------解决方案--------------------
请联系Peter von der Ah&eacute,让他改改Javac就可以编译通过了
------解决方案--------------------
class T implements A, B {
void m(){};
int m(){return;};

}
这样应该可以了

------解决方案--------------------
class T implements A, B {
void m(){};
int m(){return;};

}
这样应该可以了

================================================
一样会报错。不能只是以返回值来区分两个函数。
------解决方案--------------------
还真没注意到这样的问题。。区分2个函数应该只能用参数吧
------解决方案--------------------
eclipse 有自动揪错功能 能点左边的叉号能自动添加继承接口的方法 同时继承这样的两个接口不能添加了 理论上来说不能实现这种功能
------解决方案--------------------
重载函数M
------解决方案--------------------
没法重载
重载需要函数同名,参数不同(a,数据类型不同,b个数不同,c顺序不同)返回值类型不同
关键的是前两个条件
单单靠返回值类型是无法重载函数的
不过java传参的时候,会根据实际情况进行一些类型转换
------解决方案--------------------
interface A {
void m();
}

interface B {
int m();
}

class T implements A, B {
void A.m() {}
int B.m(){}
}

调用
T t = new T();
A a = t;
B b = t;
a.m();
b.m();

你去看看对么
C#里面这么写 叫显式接口
------解决方案--------------------
我想是不是这个题目本身就是错误的啊。
因为这个题目是接口,必须实现里面的方法,但是两个方法又是重名,参数一致,他们有够不成重载(方法名一致,参数不一致,才可以够成重载),只能是设计不合理。

------解决方案--------------------
接口设计得有问题,那两个方法是不可能同时实现的
------解决方案--------------------
接口设计很不合理,一定要一个来实现的话是不可能的,要不就要两个来分别实现一个接口,且同时继承同一个父类,然后要用的时候再对应实例对象,但这等于脱了裤子放屁,吓忙!

------解决方案--------------------
重新设计接口。。。
------解决方案--------------------