怎么调用接口中的方法

我有一个接口,在一个类中想调用这个接口中的方法,现在还不知道哪个类实现这个接口,实现将来哪个类实现了这个接口就调用哪个类中的这个方法... 我有一个接口,在一个类中想调用这个接口中的方法,现在还不知道哪个类实现这个接口,实现将来哪个类实现了这个接口就调用哪个类中的这个方法 展开
 我来答
勤奋的小马眼
2020-05-09 · TA获得超过338个赞
知道答主
回答量:20
采纳率:100%
帮助的人:4534
展开全部

1、首先启动电脑上的Eclipse,依次选择File→New→Project。在弹出的Select a wizard窗口中,选择Java Project 后点击下一步。

2、输入项目名称后点击下一步(名称命名可以任意,但是要注意符合命名规范)、

3、鼠标右击新建的项目,依次选择New→Package,在package name里面输入自己想取的名字后点击next

4、鼠标右击包,依次选择New→ Interface,创建一个接口

5、将接口命名为ShoutAbility后,点击完成。

6、定义接口shout()方法,并按下Ctrl +S 保存,经常保存是一个良好的习惯。

7、右击包,依次选择New→Class,并将类命名为AoShout。

8、将AoShout 实现ShoutAbility接口,并且要实现接口里面的shout方法,实现接口的关键字为 implements。按下Ctrl+S 保存。

9、创建一个Bird类,并定义一个带参构造方法,实例化上面定义的接口。定义Bird 的 shout() 方法时,即可用接口变量调用接口方法。按下Ctrl +S 保存。

10、创建一个测试类,用接口的实现类AoShout创建一个接口对象,再用创建的bridShout对象创建一个鸟对象。这时候调用鸟类的方法,就会执行调用到接口的方法,通过接口找到实现类的方法嗷嗷叫。

解忧杂货店2126
2015-10-12
知道答主
回答量:30
采纳率:0%
帮助的人:8.5万
展开全部
类本身的修饰符可以为public,internal等(VS2008里试过)。但是显示实现接口方法时,接口成员却不允许添加任何修饰符(VS2008里试过)。

接口的继承与调用
隐式实现接口方法:

例子:
定义个类Base,该类实现了IDisposable

// This class is derived from Object and it implements IDisposable
internal class Base : IDisposable
{
// This method is implicitly sealed and cannot be overridden
public void Dispose()
{
Console.WriteLine("Base's Dispose");
}
}
// This class is derived from Base and it re-implements IDisposable
internal class Derived : Base, IDisposable
{
// This method cannot override Base's Dispose. 'new' is used to indicate
// that this method re-implements IDisposable's Dispose method
new public void Dispose()
{
Console.WriteLine("Derived's Dispose");
// NOTE: The next line shows how to call a base class's implementation (if desired)
// base.Dispose();
}
}

结果调用显示:

public static void Main()

{

/************************* First Example *************************/

Base b = new Base();
// 用b的类型来调用Dispose:结果Base's Dispose
b.Dispose();
// 用b所指向的对象的类型来调用Dispose,
// 因为b的对象的类型IDisposable的Dispose方法是b的对象实现的
//所以结果是;Base's Dispose,和上面一样的
((IDisposable)b).Dispose();

/************************* Second Example ************************/

Derived d = new Derived();
// 用d的类型来调用Dispose,结果;Derived's Dispose
d.Dispose();
//用d所指向对象的类型来调用Dispose,结果:"Derived's Dispose"
((IDisposable)d).Dispose();

/************************* Third Example *************************/

b = new Derived();
// 用b的类型来调用Dispose,b的类型是Base。结果是:Base's Dispose
b.Dispose();
// 用b所指对象的类型调用Dispose,b所指的对象是Derived,所以结果是:Derived's Dispose
((IDisposable)b).Dispose();

}

上面接口的方法调用中,要注意两个概念:当调用一个接口方法时,到底是对象所指的类型在调用,还是类型在调用。

上述的Base类和Derived 类中的Dispose方法都隐式的实现了接口IDisposable中的Dispose方法。若对于接口IDisposable中的Dispose方法做显示实现,则可以更加清楚的看到这一点。

现在对代码做显示的实现。
显示接口方法实现

internal class Base : IDisposable

{

// This method is implicitly sealed and cannot be overridden

public void Dispose()

{

Console.WriteLine("Base's Dispose");

}

/// <summary>
/// Base显示实现IDisposable
/// </summary>
void IDisposable.Dispose()
{
Console.WriteLine("Base->IDisposable.Dispose");
}

}

internal class Derived : Base, IDisposable

{

// This method cannot override Base's Dispose. 'new' is used to indicate

// that this method re-implements IDisposable's Dispose method

new public void Dispose()

{

Console.WriteLine("Derived's Dispose");

// NOTE: The next line shows how to call a base class's implementation (if desired)

// base.Dispose();

}

/// <summary>
/// 显示实现Dispose方法
/// </summary>
void IDisposable.Dispose()
{
Console.WriteLine("Derived—IDisposable.Dispose");
}

}

同样的调用代码如下,则结果为:

public static void Main()
{
/************************* First Example *************************/
Base b = new Base();
// 用b的类型来调用Dispose,b的类型是Base,结果将调用类型的公共方法public void Dispose():结果Base's Dispose
b.Dispose();
// 用b所指的对象的类型来调用Dispose,
// 因为b的对象的类型IDisposable的Dispose方法是b的对象显示实现的,它与Base类中的公共方法
//public void Dispose()无关,它将调用接口类型IDisposable的void IDisposable.Dispose()方法
//所以结果是;Base->IDisposable.Dispose,和上面是不一样的。

((IDisposable)b).Dispose();

/************************* Second Example ************************/

Derived d = new Derived();
// 用d的类型来调用Dispose,d的类型是Derived,它将调用方法public void Dispose() 。结果是Derived's Dispose
d.Dispose();
//用d所指对象的类型来调用Dispose,d对象类型被显示转换成了IDisposable,因此它将调用
//void IDisposable.Dispose()方法,因此结果是“Derived—IDisposable.Dispose”
((IDisposable)d).Dispose();

/************************* Third Example *************************/

b = new Derived();
// 用b的类型来调用Dispose,b的类型是Base。结果是:Base's Dispose
b.Dispose();
// 用b所指的对象的类型调用Dispose,b所指的对象是Derived,Derived类型的对象被强制转换成接口类型IDisposable。
//它调用的是void IDisposable.Dispose()。所以结果是:"Derived—IDisposable.Dispose"
((IDisposable)b).Dispose();

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Jseven_jy
推荐于2018-07-13 · TA获得超过8122个赞
知道大有可为答主
回答量:2499
采纳率:100%
帮助的人:1105万
展开全部
直接调用啊

比如
interface A {
void interfaceMethod();
}

class B {
public void classMethod(A a) {
a.interfaceMethod();//直接这样调用没有任何问题的 因为他A是接口不能实例化 他传给你的a对象一定是实现了A接口的 调用的也就是实现的那个方法
}

}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pieryon
2019-09-30 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14411 获赞数:166863
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部

因为很多类都实现了这个接口所以就可以直接使用,你看一下

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
默林轻扬片飞叶
2010-09-07 · 超过17用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:56.2万
展开全部
要用到反射或者XML文件解析吧
接口的用法一般都离不开反射的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式