Java:如何从接口名称调用Implemented方法

时间:2011-09-26 10:28:32

标签: java

我不知道界面如何适用于我的问题,但我已经通过界面here

读到了它的可能性

问题:我创建了一个接口,其中包含所有方法的声明大约3000+我在3个不同的类中实现这些方法,现在我想在我的主文件中调用Interface中的方法,因为我需要来自任何类的任何方法,我不能扩展多个类,所以我想到使用接口。

我可以这样做吗答案很受欢迎。

更新:使用扩展我可以使用super.methodName();这样我就不会创建一个对象了。 我可以在不同的接口或不同的类中拆分这些方法,但我必须在不创建对象的情况下访问方法请link了解我想要做什么。

Update2:此处声明Interface ABC // public int go()函数

Class XYZ implements ABC

method go(object imp)  
{.....}   

另一个班级

Class PQR extends/implements ABC 
{
   // some code
   int ret = super.go(this); OR int ret = obj.go(this)
} // What Should I use I now ABC is my interface but dont know where is it implemented so i want to call the go function how can I do this Please Explain what should i use.

由于

3 个答案:

答案 0 :(得分:3)

当您在接口上调用方法时,它实际上会在具体类上调用实现方法。你有一个疯狂的方法数量或你有多少课程并不重要。 e.g。

List list = new ArrayList();
list.size(); // actually calls ArrayList.size()
BTW:只有相对较少的类有3000行,更不用说3000种方法了。我假设这是生成的代码。

答案 1 :(得分:3)

设为接口Z,实现Z的类A和B. Z有一个方法m1()。

Z z1 = new A();
Z z2 = new B();
z1.m1(); // actually calls m1 as implemented in A even if the object is declared as Z.
z2.m1(); // different implementation of the same method m1

声明 z1为Z类型,但实现为A.与z2相同但对于B.

答案 2 :(得分:0)

如果您正在讨论生成的代码,我认为您需要的是在运行时加载一个类。如果没有在具体类中实现这些方法,并且(没有)指向实例化对象(实现该接口)的接口“引用对象”,则无法调用接口的方法。

所以解决方案就是使用Reflection,我建议你看一下。这将让您了解如何在运行时加载类,调用方法和传递参数,而不是在编译时。 (即你可以在恐龙课程产生后调用这些方法)

可以在http://java.sun.com/developer/technicalArticles/ALT/Reflection/

找到一个小例子