java开发中调用一个接口的方法时是怎么调用到该接口的实现类的?
1.写一个接口。
2.再写一个类来实现该接口。
3.用接口作为转型对象来引用实例化对象。
InterfaceName aa=new InterfaceImpl();
调用接口的方法两种情况:
1:你已经实例化了这个接口
2:定义一个方法,给他的参数就是这个接口的类型。
这样就可以编译成功了。
但是同样,你给编译器一个假象。
编译器也还给你一个假象。就是没结果,彼此彼此
所以看出:调用一个方法必然是需要实例化的。
回到面向对象这一节:
你们班同学每个人都是不同的类,都同属于统一班级,
都有一个共同的技能:认真听课。
你可以调用这个方法
也可以通过你们的班级这个接口调用这个方法让你听课。
例:xxx班的xxx认真听课。
同样的,你还属于你们村。
你们村的人都有一个技能,唱歌
你自己可以去唱歌。
也可以通过xxx村的xxx去唱歌。
很明显,班级不会听课。
村子也不能唱歌。
都是需要一个具体的你进行操作的。
所以,一个接口只是一种类型。
不管它被实现了多少次,怎么实现的。
都跟你没有一点关系。
类型本身是没有操作的,除非你给他了一个对象。
不要纠结于他是怎么调用的。
你把对象都给他了 ,还问他怎么调用的。
还有一种可能,你的当前类继承了一个实现这个接口的类。
你自己就是这个对象!!!
(纯手打,半夜三四点看见这个帖子忍不住回复的)
问题明明就是这么简单,别自己想复杂了。
java三大特性:继承,封装,多态。这就是多态的体现,在运行时,根据对象引用的实际类型来执行对应的方法
Api api = new ApiImpl();
其中Api为接口,ApiImpl为Api的一个实现类
你调用不到接口的方法的,你用接口声明变量,然后用实现类实例赋值,变量指向的就是实现类的实例的内存地址,调用方法就是调用的实现类的方法了
推荐你看看大话设计模式这本书,讲得很好
先要弄个接口实例化类,才能调用
先写一个接口实例化类
一般调用方法使用这种方式:
new一个实体,例如:
方法名是name()
Test test=new test()
test.name()
其实 接口对象所指向的内存是实体类的内存
在编译的时候会生成“指针” 指向对象内存的方法区,调用时候自动寻址调用
你理解的不对,java接口是不能实例化调用的,实例化的肯定是接口的实现类,你看看你的代码实例化对象在哪实例的