接口回调的原理:接口变量 调用 被类实现的接口的方法
2015-05-12 13:36
281 查看
其目地都是抽象。通过访问父类或接口的方法(公共)达到一种对具体实现的封装。对于接口的使用者来说,不需要关心实现细节。提高内聚,降低不必要的耦合。接口回调是指:可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。
interface People
{
[align=left] void peopleList();[/align]
[align=left]}[/align]
[align=left] [/align]
class Student implements People
{
publicvoid peopleList()
{
System.out.println("I’m
a student.");
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
class Teacher implements People
{
publicvoid peopleList()
{
System.out.println("I’m
a teacher.");
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
publicclass Example
{
publicstaticvoid main(String
args[]) {
[align=left] People a; // 声明接口变量[/align]
[align=left] a = new Student(); // 实例化,接口变量中存放对象的引用[/align]
[align=left] a.peopleList(); // 接口回调[/align]
[align=left] a = new Teacher(); // 实例化,接口变量中存放对象的引用[/align]
[align=left] a.peopleList(); // 接口回调[/align]
[align=left] }[/align]
}
结果:
I’m a student.
I’m a teacher.
再来看看向上转型(upcasting)的概念。
2.什么是向上转型[1]?
这里,创建了一个Circle对象,并把得到的引用立即赋值给Shape。通过继承,Circle就是一种Shape。
假设你调用基类方法(它已在导出类中被覆盖):
由于后期绑定(多态),将会正确调用Circle.draw()方法。
3.Java中的跨类引用
在java里面,关于跨类引用,有两条规则应该记住:
1)如果a是类A的一个引用,那么,a可以指向类A的一个实例。或者说指向类A的一个子类,这是向上转型的情形。
2)如果a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。这是接口回调的情形。
在java里面,向上转型是自动进行的,但是向下转型却不是,需要我们自己定义强制进行.
4.向上转型与接口回调的区别
从实现了某接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的。这些对象都可以调用基类型提供的方法,对于接口来说就是回调接口中的方法,对于父类来说就是调用父类的方法。当然在向上转型的情况下,还牵涉到子类重写(Override)父类方法的情形。
interface People
{
[align=left] void peopleList();[/align]
[align=left]}[/align]
[align=left] [/align]
class Student implements People
{
publicvoid peopleList()
{
System.out.println("I’m
a student.");
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
class Teacher implements People
{
publicvoid peopleList()
{
System.out.println("I’m
a teacher.");
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
publicclass Example
{
publicstaticvoid main(String
args[]) {
[align=left] People a; // 声明接口变量[/align]
[align=left] a = new Student(); // 实例化,接口变量中存放对象的引用[/align]
[align=left] a.peopleList(); // 接口回调[/align]
[align=left] a = new Teacher(); // 实例化,接口变量中存放对象的引用[/align]
[align=left] a.peopleList(); // 接口回调[/align]
[align=left] }[/align]
}
结果:
I’m a student.
I’m a teacher.
再来看看向上转型(upcasting)的概念。
2.什么是向上转型[1]?
Shape s=new Circle(); |
假设你调用基类方法(它已在导出类中被覆盖):
s.draw(); |
3.Java中的跨类引用
在java里面,关于跨类引用,有两条规则应该记住:
1)如果a是类A的一个引用,那么,a可以指向类A的一个实例。或者说指向类A的一个子类,这是向上转型的情形。
2)如果a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。这是接口回调的情形。
在java里面,向上转型是自动进行的,但是向下转型却不是,需要我们自己定义强制进行.
[align=left]class B extends A{}[/align] [align=left] [/align] publicclass A { publicstaticvoid main(String[] argts){ [align=left] A a1=new A();[/align] [align=left] A a2=new B();//Upcasting向上转型[/align] [align=left] B b1=new B();[/align] [align=left] B b2=(B) new A();//DownCasting向下转型,[注意]:此处(B)进行了强制转换![/align] [align=left] }[/align] } |
从实现了某接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的。这些对象都可以调用基类型提供的方法,对于接口来说就是回调接口中的方法,对于父类来说就是调用父类的方法。当然在向上转型的情况下,还牵涉到子类重写(Override)父类方法的情形。
相关文章推荐
- 接口回调的原理:接口变量 调用 被类实现的接口的方法
- 接口回调的原理:接口变量 调用 被类实现的接口的方法
- java接口类型变量能调用已经被实现的这个接口的方法吗
- (2013-5-5日记)实现接口后 接口型变量调用方法浅析
- Log信息获取调用类和调用方法名的实现原理
- 根据RemObject的远程方法调用原理实现的简单远程方法调用
- 利用Windows Group实现基于角色的WCF接口方法调用授权
- java反射机制获取成员变量调用和调用实例方法的实现
- csp接口实现中调用FuncReturnhWnd异常 解决方法
- 新浪微博客户端源代码-新浪微博OAuth2.0接口--回调地址未填而出现第三方调用错误解决方法
- Log信息获取调用类和调用方法名的实现原理
- 用接口实现通过改外部文件实现判断调用接口内的方法
- dll动态链接库之用类写配置文件和调用判断方法接口的实现中遇到的若干问题
- js 调用后台方法 ICallbackEventHandler 接口实现局部刷新实例 ClientScript的GetCallbackEventReference方法实现局部刷新
- 黑马程序员——枚举的原理及枚举构造方法调用,抽象方法实现等等介绍
- Log信息获取调用类和调用方法名的实现原理
- cxf实现的webservice,调用接口的方法后出现异常
- 关于Java中Scanner对象的hasNext()方法对实现Readable接口的对象中的read()方法调用的探讨
- 根据RemObject的远程方法调用原理实现的简单远程方法调用
- 根据RemObject的远程方法调用原理实现的简单远程方法调用 收藏