求教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é,让他改改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#里面这么写 叫显式接口
[解决办法]
我想是不是这个题目本身就是错误的啊。
因为这个题目是接口,必须实现里面的方法,但是两个方法又是重名,参数一致,他们有够不成重载(方法名一致,参数不一致,才可以够成重载),只能是设计不合理。
[解决办法]
接口设计得有问题,那两个方法是不可能同时实现的
[解决办法]
接口设计很不合理,一定要一个来实现的话是不可能的,要不就要两个来分别实现一个接口,且同时继承同一个父类,然后要用的时候再对应实例对象,但这等于脱了裤子放屁,吓忙!
[解决办法]
重新设计接口。。。
------解决方案--------------------
java不允许的,就算你能实现了调用的时候你知道调用的是哪个?
[解决办法]
让IDE自动实现接口不就ok?哈哈!
[解决办法]
http://www.tcpflow.com
[解决办法]
编译通不过的 两个方法得一模一样
[解决办法]
呵呵,重载是与返回值类型无关的
[解决办法]
呵呵,看的讲座里提到过这个问题,现在还没有什么好的解决办法。
你最好不要同时去实现这样的两个接口。
[解决办法]
违背java重载的原则了吧
重新设计接口,呵呵
[解决办法]
没想到这个问题啊
[解决办法]
这个根本不行的,所谓重载是什么啊?自己看看就知道了。那两个根本不符合重载的定义啊,这两个方法编译的时候java虚拟机会认为是一个方法的,因为它们方法名相同而且参数也一样,所以通不过
[解决办法]
回贴得同志不要想当然的回,
[解决办法]
设计问题!
[解决办法]
确实是设计不合理,又不构成重载。没必要这样设计。程序设计是需要变通的我觉得
[解决办法]
不知道这样行不?
interface A {
void a();
}
interface B {
int a();
}
class ProxyB implements B{
A a;
public int a() {
return 0;
}
void aInA() {
a.a();
}
}
[解决办法]
class ABImpl {
public final A AImpl = new A() {
public void m() {}
}
public final B BImpl = new B() {
public int m() {}
}
}
使用的时候,可以创建一个ABImpl的实例ab,然后调用ab.AImple.m()和ab.BImple.m()。
也可以根据逻辑或者开发上的需要,写成如下形式:
class ABImpl implements A {
public void m() {}
public final B BImpl = new B() {
public int m() {}
}
}
这样,可以用ab.m()和ab.BImpl.m()。
[解决办法]
只能用内部类进行实现
