`

Java中什么是接口回调?

阅读更多
1.接口回调是什么[2]
接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。
package com.cn.fangxin.test;

public interface People {
	
	void peopleList();
	
}
 
package com.cn.fangxin.test;

public class Student implements People {

	@Override
	public void peopleList() {
		System.out.println("I’m a student.");
	}

}
 
package com.cn.fangxin.test;

public class Teacher implements People {

	@Override
	public void peopleList() {
		System.out.println("I’m a teacher.");
	}

}
 
package com.cn.fangxin.test;

public class Example {
	public static void main(String args[]) {
		People a; // 声明接口变量
		a = new Student(); // 实例化,接口变量中存放对象的引用
		a.peopleList(); // 接口回调
		a = new Teacher(); // 实例化,接口变量中存放对象的引用
		a.peopleList(); // 接口回调
	}
}
 
结果:
I’m a student.
I’m a teacher.
再来看看向上转型(upcasting)的概念
2.什么是向上转型[1]
Shape s=new Circle();
 
这里,创建了一个Circle对象,并把得到的引用立即赋值给Shape。通过继承,Circle就是一种Shape。
假设你调用基类方法(它已在导出类中被覆盖):
s.draw();
由于后期绑定(多态),将会正确调用Circle.draw()方法。
 
3.向上转型与接口回调的区别
看似向上转型和接口回调是一回事。看下面两句话,均出自Thinking in Java。
使用接口的核心原因:为了能够向上转型为多个基类型[1]。即利用接口的多实现,可向上转型为多个接口基类型(具体见《抽象与接口》章节6)。
从实现了某接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的。(此句摘自Thinking in Java 3rd 接口与内部类一章)
所以,我认为,这两个概念是从两个方面来解释一个行为。接口回调的概念,强调使用接口来实现回调对象方法使用权的功能(下一章节详细分析)。而向上转型则牵涉到多态和运行期绑定的范畴。
 
4.用 Java 接口实现回调函数的等价功能
熟悉 MS-Windows 和 X Window System 事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即“回调”)的函数指针。Java 的面向对象模型目前并不支持方法指针,Java 的接口支持提供了一种获得回调的等价功能的机制。其技巧就是:定义一个简单接口,并在该接口中声明我们要调用的方法。
假定我们希望在某个事件发生时得到通知。我们可以定义一个接口:
package org.zj.samle;
public interface InterestingEvt {
    public void interestingEvent ();
}
 
这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。
发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用 interestingEvent() 方法。
EventNotifier.java
package com.cn.fangxin.event;

/**
 * 事件通知类
 * 
 * @author Jack
 * 
 */
public class EventNotifier {
	
	private InterestingEvent ie;
	private boolean somethingHappened;

	public EventNotifier(InterestingEvent event) {
		ie = event; // 保存事件对象以备后用。
		somethingHappened = false; // 还没有要报告的事件。
	}
	
	 public void doWork() {
         if (somethingHappened) { // 检查设置的谓词。
           ie.interestingEvent();// 通过调用接口的这个方法发出事件信号。
         }
    }
   
    public void setHappened(){//设置谓词。
         somethingHappened=true;
    }
}
 
在上例中,使用 somethingHappened 谓词来跟踪是否应触发事件。希望接收事件通知的代码必须实现 InterestingEvent 接口,并将自身引用传递给事件通知程序。
CallMe.java
/**
 * 定义CallMe事件
 * @author Jack
 *
 */
public class CallMe implements InterestingEvent {

	@Override
	public void interestingEvent() {
		System.out.println("Call me Hello.");

	}

}
 
下面写个测试类。
Test.java
 
package com.cn.fangxin.event;

public class Test {
	
	public static void main(String[] args) {
        EventNotifier en=new EventNotifier(new CallMe());//通知CallMe事件。
        en.setHappened();
        en.doWork();
   }

}
 
结果:
Call me Hello.
分享到:
评论

相关推荐

    java接口回调

    当我们谈论“Java接口回调”时,核心思想是:一个类通过实现特定接口,将自身的某个方法暴露给其他对象调用,当特定事件发生或任务完成时,调用这个暴露的方法进行后续处理。 接口回调在Java中的应用广泛,例如在...

    接口回调demo

    在Java编程中,接口回调是一种常见的设计模式,用于实现对象之间的通信和事件处理。当我们谈论“接口回调”时,我们通常是指一个类实现了接口,并在特定条件下调用接口中的方法来通知其他对象某个操作已完成或者发生...

    Java利用接口实现回调

    在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。  熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...

    微信支付-商户支付模式一url接口回调-java版

    在这个Java版的实现中,我们将探讨如何利用URL接口回调来处理支付流程。 首先,我们需要理解URL接口回调的基本概念。在微信支付中,当用户完成支付后,微信服务器会主动向商家设定的回调URL发送一个POST请求,携带...

    android接口回调详解、简单例子+复杂例子

    在Android开发中,接口回调是一种常见的通信机制,用于在组件之间传递信息,特别是在异步操作中,如网络请求、文件读写等。接口回调能够帮助我们处理这些操作的结果,使得程序更加灵活和响应式。本篇文章将深入讲解...

    Java中的接口回调实例

    Java中的接口回调实例 Java 中的接口回调实例是一种常见的编程设计模式,它允许开发者在不改变原有代码结构的情况下,轻松地实现新的功能扩展。今天,我们将深入探讨 Java 中的接口回调实例,了解它的定义、实现和...

    理解接口回调

    在Android开发中,接口回调是一种常见的编程模式,用于在组件之间进行通信,特别是当需要一个组件(如Activity或Fragment)响应另一个组件的行为时。本文将深入探讨接口回调的概念,以及如何在Android环境中有效地...

    android接口回调

    在Android开发中,接口回调是一种常见的通信机制,用于在不同组件之间传递信息,尤其是在异步操作完成后更新UI或执行其他后续操作时。本篇将详细阐述Android接口回调的基本概念、实现方式以及其在实际开发中的应用。...

    java实现企业微信回调配置案例

    在企业微信的开发中,回调配置是至关重要的一个环节,它允许系统在特定事件发生时自动调用预先设定的接口,进行数据同步或业务处理。本案例将详细讲解如何使用Java来实现企业微信的回调配置,并提供相关的工具代码...

    接口回调实现简易购物车功能

    在本示例中,“接口回调实现简易购物车功能”着重展示了如何利用接口回调来构建一个简单的购物车系统。下面将详细阐述接口回调的基本概念、其在购物车功能中的应用以及实现过程。 接口回调的核心在于定义一个接口,...

    java 回调函数 实现

    在Java编程中,回调函数是一种设计模式,它允许一个对象在另一个对象...在给定的示例中,`Button.java`和`OnButtonClickListener.java`展示了如何通过接口来实现回调,而`CallMeTest.java`则可能是测试回调功能的代码。

    Java中的接口回调

    接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,是通知相应的对象调用接口的方法,...

    接口回调传值

    本篇文章将详细探讨“接口回调传值”的概念及其在实际应用中的实现方式,以"InterfaceCallBackDemo1"为例进行讲解。 首先,理解接口回调传值的基本原理。在Android中,当需要在两个不直接相关的组件(如Activity和...

    匿名内部类实现接口回调

    在Java编程中,接口回调是一种常见的设计模式,用于在对象之间传递异步事件或实现通信。这个"匿名内部类实现接口回调"的示例旨在演示如何通过匿名内部类来简化回调函数的实现。下面我们将详细探讨接口回调的概念、...

    接口回调demo完全解析

    在编程领域,接口回调是一种常见的设计模式,尤其在Java、C#等面向对象的语言中广泛使用。接口回调允许一个对象调用另一个对象的方法,而这个方法的定义在调用者中,而不是被调用者。这种模式使得代码更加灵活,能够...

    接口回调之Fragment之间通信

    在"FragmentInteractInterface"这个示例项目中,可能包含了具体的代码实现和应用场景,可以帮助你更好地理解和实践接口回调在Fragment通信中的运用。建议你下载并研究这个项目,通过实践加深理解。同时,不断学习和...

    Java编程接口回调一般用法代码解析

    Java接口回调一般用法: 1. 实现接口实际上和继承抽象类类似,只不过继承是在类的层面上操作,接口是在方法和常量集合的层面上操作,接口比抽象类更抽象、更简洁。可以把实现接口看成继承特定的一个或多个方法以及...

    InterfaceCallbackDemo,接口回调

    首先,让我们了解什么是接口回调。在Java或Kotlin中,接口是一种定义方法签名但不提供实现的类型。当一个类实现这个接口,它必须提供接口中所有方法的实现。在Android中,接口回调常用于Activity和Adapter之间的通信...

Global site tag (gtag.js) - Google Analytics