public class Test{
public static void main(String[] args){
C c1=new C();
c1.m();
}
}interface A{
void m();
}interface B{
int m();
}class C implements A,B{
public void m(){
System.out.println("void m()");
}
public int m(){
System.out.println("int m()");
}
}
以上的代码当然无法通过编译,我的问题就是,当一个类继承了多个接口,而这些接口中又有同名的方法,方法的返回又不同,因此这个类怎么实现这些方法呢。(除了改方法名有什么办法)
public static void main(String[] args){
C c1=new C();
c1.m();
}
}interface A{
void m();
}interface B{
int m();
}class C implements A,B{
public void m(){
System.out.println("void m()");
}
public int m(){
System.out.println("int m()");
}
}
以上的代码当然无法通过编译,我的问题就是,当一个类继承了多个接口,而这些接口中又有同名的方法,方法的返回又不同,因此这个类怎么实现这些方法呢。(除了改方法名有什么办法)
public static void main(String[] args){
C c1= new C();
c1.m();
}
}interface A{
void m();
}interface B{
int m(int s);
}class C implements A,B{
private int s;
public void m(){
System.out.println("void m()");
}
public int m(int s) {
this.s =s;
System.out.println("int m()");
return s;
}
}
接口B是有返回类型的方法,所以需要参数,加个int s可以了
public static void main(String[] args){
C c1=new C();
c1.m1();
c1.m();
}
}interface A{
void m1();
}interface B{
void m1();
}class C implements A,B{
public void m1(){
System.out.println("void m()");
}
public void m(){
System.out.println("int m()");
}
}
这样改可能更符合作者的原意,
其实我觉得不改应该不行,JAVA中命名本身是种艺术,达到目的就好了,何必在乎如何误导读者哩,呵呵
我把接口A中的方法改成long m(int s)的话你怎么办
那么应该这么写
interface D {
void m(int s); //m()为A、B共有的能力
}
interface A extends D {
void ma(); //ma()为A特有的能力
}
interface B extends D {
void mb(); //mb()为B特有的能力}
没错,孩子,这种情况在Java语言规范里是明确不支持的。