[英]How to find out which interface a method was called on?
我有一个简单的Java问题。 考虑以下接口:
interface A {
void work();
void a();
}
interface B {
void work();
void b();
}
所以当一个类要实现它们时,它应该是这样的:
class Impl implements A, B {
void work() {
/*some business*/
}
void a() {}
void b() {}
}
我的问题是,在work
方法中,我如何发现它,它是由类型A
或B
调用的?
C#中的上述类就是这样,这样可以很好地区分两个实现:
class Impl : A, B
{
void B::work() {}
void A::work() {}
void a() {}
void b() {}
}
但是我如何在Java中实现类似C#模型的东西?!
提前致谢。
都不是。 interface
的概念是实现它的类,与接口所暗示的“契约”一致。 如果你有两个接口,要求实现方法work()
和实现两个接口的类,那么它必须实现work()
以同意两者的契约。
JavaDoc说:
实现接口允许类对其承诺提供的行为变得更加正式。 接口在类和外部世界之间形成契约,并且该合同在构建时由编译器强制执行。 如果您的类声称实现了一个接口,那么该接口定义的所有方法必须在其成功编译之前出现在其源代码中。
这正是您通过实现work()
方法所做的事情:您同时满足接口A
和B
您的界面仅告诉您实现类需要提供的方法的签名。 在您的示例中, A
和B
要求方法work()
具有返回类型的void
。 所以基本上他们都要求采用相同的方法。 我不知道你怎么可能或需要区分?
您可能遇到diamand实现问题。 你需要自己指定它。
void work() { A.super.work(); } // or B.super.work();
方法work
将满足两个接口的要求。 该方法包含在类中,可以实例化两个接口。 为了实现接口,类必须拥有接口中指定的方法。 如果使用相同的方法来满足多个接口的要求并不重要。
JVM不会调用A或B,而只调用Impl实现。 您可以转换回A或B,并且您的客户端可以根据特定接口中可用的方法调用方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.