A类可以实现多个接口。
我不明白在这种情况下会发生什么:
public interface example1 {
void checkInt(int a);
}
public interface example2 {
void checkInt(int b);
}
public class class1 implements example1,example2 {
void checkInt(int c){
System.out.print(c);
}
this.checkint(5);
}
我试图运行它,它给了我编译错误。但我的问题一般是,我可以实现两个具有相同签名功能的接口吗?
答案 0 :(得分:3)
你得到的编辑错误是什么?由于this.checkint
出现错误,因此应为checkInt(5)
?此外,您将方法的范围从隐含的公共(如所有接口方法)减少到默认(打包保护)。 checkInt
方法需要在实现类中公开。
两个接口都定义了方法,但这很好,因为class1
上有一个实现。所以class1
通过checkInt(int i)
的实现来实现每个接口的实现方法。使用接口只需要履行合同,因此对于调用哪种方法没有任何歧义 - 如果使用类型为example1
或example2
的引用,它仍然是相同的checkInt
class1
上被调用的方法。
答案 1 :(得分:2)
编译错误是因为您在方法checkInt
的实现类中缺少可见性属性(public),并且您有一个未被任何方法包含的语句。
但是一般来说,如果你有一个实现多个具有公共方法签名的接口的类,那么该类只有一个实现来满足这两个接口。
答案 2 :(得分:1)
我很确定您的编译错误来自this.checkint(5)
行,而不是接口实现。实现两个共享具有相同签名的方法的接口是完全合法的,您已经完成了上述操作。
您可以这样想:当一个类实现一个接口时,它同意实现该接口定义的所有方法。只要您已满足每个接口的此要求,您实际编写的方法数量无关紧要。
另外,请考虑如何实际使用接口:
example1 e1 = new class1();
e1.checkInt(3); // Calls class1.checkInt()
example2 e2 = new class1();
e2.checkInt(3); // Also calls class.checkInt()
接口变量实际上是指类型为class1的对象,因此class1的方法很重要,而不是class1实现的其他接口。
答案 3 :(得分:0)
您不继承接口,而是实现它。实现界面的方法是通知您班级的消费者您保证可以使用某组方法。许多接口在合同中可以有单个方法签名,但由于只有实现类具有实际代码,因此没有问题。
答案 4 :(得分:0)
是的,您可以实现这两个接口。但是,通常不建议这样做,因为它可能会导致您所说的混乱。
您只能在参数,名称和返回类型完全匹配的特定情况下实现两个接口,否则会发生冲突。如果名称或参数类型不同,则需要单独实现。如果所有不同的是返回类型,那么在它们发生冲突时就不可能实现这两个接口。
如果两个接口恰好具有该方法的不同含义,那么您最好提供适配器。请参阅Adapter pattern。
A whole article on solving this problem has been written here
您的编译错误是由于其他原因(在这种情况下,您尚未声明您的实现方法public
),并查看您提供的代码示例,可能还有很多其他内容!
答案 5 :(得分:0)
来自接口的类inherit
。
Classes inherit Classes
Interfaces inherit interfaces
Classes `implements` Interfaces
你的例子非常好,因为Interface只声明了签名(或契约),没有定义行为。类'实现'接口以提供行为。因此,实现两个接口的类可以为这两个方法提供“相同”的实现 - 合同不会像类is
那样消除行为。