首页新闻找找看学习计划

一个接口有多个实现类,怎么知道调用了哪个实现类。

0
[待解决问题]

一个接口有多个实现类,如果不主动控制,如何知道调用了哪个实现类。

接口是根据什么来选择实现类的?

北京金孔雀的主页 北京金孔雀 | 菜鸟二级 | 园豆:202
提问于:2017-05-27 16:37
< >
分享
所有回答(3)
0

接口是根据什么来选择实现类的?

----------------------------------

接口先于实现类而存在,它无法选择哪个类来实现它。

你的问题可能需要换个问法:“调用接口的方法时,怎么确定是调用了哪个实现类中的方法?”

西漠以西 | 园豆:1670 (小虾三级) | 2017-05-27 16:51

我有的接口类有3个实现类A,B,C,但我调用时,只会调用C中有实现方法。

所以我想知道,接口是如何选择的,而不是A或B。

支持(0) 反对(0) 北京金孔雀 | 园豆:202 (菜鸟二级) | 2017-05-27 16:55

@北京金孔雀: 

“调用接口的方法时,怎么确定是调用了哪个实现类中的方法?”

------------------------------------------------------------------

运行时环境会确定被接口引用的对象是哪个实现类的类型,这样调用接口中的方法时,运行时就知道了该调用哪个实现类中方法的代码。

这是OOP中所谓的多态性。

支持(0) 反对(0) 西漠以西 | 园豆:1670 (小虾三级) | 2017-05-27 17:07

@北京金孔雀: 

interface IFun

{

      void F1();

}

 

class FunA : IFun

{

    public void F1(){Console.Wirte("FunA.F1");}

}

 

 

class FunB : IFun

{

    public void F1(){Console.Wirte("FunB.F1");}

}

 

 

public static void Main()

{

    IFun obj = new FunA();//把这里换成new FunB();重新运行,你就明白了。

    obj.F1();

}

支持(2) 反对(0) 西漠以西 | 园豆:1670 (小虾三级) | 2017-05-27 17:13
0

实例确定的

接口ITest,方法 Add

实例 A/B/C

声明

 ITest t1=new A()

 ITest t2=new B()

 ITest t3=new C()

调用

t1.Add()  调用 A实现

t2.Add()  调用 B实现

t3.Add()  调用 C实现

hahanonym | 园豆:1453 (小虾三级) | 2017-05-27 17:17
0

Interface A;

A a;

1.a.GetType()就得到了。

2.a = new 什么,就是什么。

花飘水流兮 | 园豆:10339 (专家六级) | 2017-05-28 16:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册