package dao; class Father{ void method(){ System.out.println("Father method called....."); } } class Son extends Father{ void method(){ System.out.println("Son method called....."); } } publicclass TestAbstract{ publicstaticvoid main(String args[]){ Father f; Son son=new Son(); f=son; // Father f=new Son(); f.method(); } } |
为什么可以用Father f=new Son();
因为Father的范围比Son的范围大,编辑器会帮助我们将子类的类型的自动转换为父类的类型,这即是父类的引用,子类的对象,
(注意:这里子类Son已经重写了父类的method()方法,所以当运行f.method();时调用的是子类的方法,所以这里可以得出两点结论,即: Father f=new Son();运行时: 1.)是父类的引用,子类的对象,实际运行时调用的是被子类重写的方法。 2.)子类重写父类的方法,只能重写父类公共的、非静态的方法。 同理) |
以下是接口引用的问题:注意其中的区别。
接口引用
static void Main(string[] args)
{
IBankAccount venusAccount = new SaverAccount();
IBankAccount jupiterAccount = new CurrentAccount();
venusAccount.PayIn(200);
jupiterAccount.PayIn(500);
Console.WriteLine(venusAccount.ToString());
jupiterAccount.PayIn(400);
jupiterAccount.Withdraw(500);
jupiterAccount.Withdraw(100);
Console.WriteLine(jupiterAccount.ToString());
}
请注意开头两句,我们把它们声明为IBankAccount(这是一个接口)引用的方式,而没有声明为类的引用,为什么呢?因为,这样我们就可以让它指向执行这个接口的任何类的实例了,比较灵活。这也就是接口回调。但这也有个缺点,如果我们要执行不属于接口的方法,比如这里重载的ToString()方法,就要先把接口的引用强制转换成合适的类型了。
接口回调的例子:
interface People{
void peopleList();
}
class Student implements People{
public void peopleList(){
System.out.println("I’m a student.");
}
}
class Teacher implements People{
public void peopleList(){
System.out.println("I’m a teacher.");
}
}
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
相关推荐
在Android开发中,接口回调是一种常见的编程模式,用于在组件之间进行通信,特别是当需要一个组件(如Activity或Fragment)响应另一个组件的行为时。本文将深入探讨接口回调的概念,以及如何在Android环境中有效地...
在编程领域,接口回调是一种常见的设计模式,尤其在Java、C#等面向对象的语言中广泛使用。接口回调允许一个对象调用另一个对象的方法,而这个方法的定义在调用者中,而不是被调用者。这种模式使得代码更加灵活,能够...
5. **注意事项**:在使用接口回调时,需要确保在Fragment被销毁之前解除接口引用,防止内存泄漏。此外,如果Fragment在同一个Activity中,可以使用`getTargetFragment()`和`setTargetFragment()`方法进行通信。 ...
// 定义回调接口引用 public void setCallBack(CallBack callback) { this.callback = callback; } @Override public void run() { // 耗时操作... // 操作完成后,调用回调接口方法 if (callback != ...
在这种情况下,接口回调是一种常用且灵活的方式。 接口回调的基本原理是定义一个接口,这个接口定义了Activity和Fragment需要相互调用的方法。Activity实现接口作为接收方,Fragment持有接口引用作为调用方。当...
3. **传递回调**:在执行异步任务的类中,我们需要持有对回调接口的引用。通常,我们会在初始化异步任务时,将实现接口的对象(通常是Activity或Fragment)传入。 ```java public class BackgroundTask { ...
在Android开发中,接口回调是一种常见的通信机制,用于在不同组件之间传递信息,尤其是在Activity、Service、BroadcastReceiver以及自定义View等之间的交互。接口回调允许一个对象调用另一个对象的方法,即使这两个...
本文将深入探讨如何通过自定义Dialog来理解接口回调(callback)机制,这在进行Android应用开发时是非常重要的一项技能。 首先,让我们了解什么是自定义Dialog。在Android系统中,Dialog是一种半透明的窗口,用于...
Fragment回调接口是Android开发中的一个重要概念,特别是在构建复杂的用户界面时。Fragment是Android应用程序设计模式的一部分,它允许我们在一个活动中包含多个可独立操作的UI片段。Fragment回调接口是Fragment与...
2. 在自定义View中使用接口:在自定义View类中,声明一个该接口的实例变量,并提供设置接口回调的方法。这样,当我们调用这个方法时,就可以传入实现了接口的对象。 ```java public class CustomView extends View ...
接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,是通知相应的对象调用接口的方法,...
在C#编程中,回调函数是一种非常重要的设计模式,它允许我们传递一个方法作为参数到另一个方法中,以便在特定事件发生或者特定条件满足时执行。这种机制使得代码具有高度的灵活性和可扩展性,特别是在处理异步操作、...
接口回调是指可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的...
在Android开发中,接口回调是一种常见且至关重要的通信机制,特别是在UI事件处理和异步编程中。本文将深入探讨Android接口回调的原理、使用场景以及如何避免常见的并发问题。 首先,让我们理解回调函数的基本概念。...
在Java编程中,接口回调是一种常见的设计模式,用于在对象之间建立通信机制,特别是在事件驱动的设计中。在本文档中,我们将深入理解如何在Java中实现接口回调,并通过实例来阐述这一概念。 首先,我们需要定义一个...
在 Delphi 中,回调通常通过函数指针或者方法引用实现。例如,你可能会创建一个通用的排序算法,它接受一个比较函数作为参数,以决定如何对元素进行排序。在“Fly”这个Demo中,可能有使用回调来处理各种事件或状态...
在接口回调中,我们可以创建一个接口类型的变量,然后将实现接口的类的对象引用赋值给它。这样,接口变量就可以调用实现类中对应接口的方法。这就像一个中介,通过接口变量,我们可以调用不同实现类的方法,而无需...
首先,`ccallback.h`文件可能包含了定义回调接口的模板类。在C++中,回调通常通过函数指针或者成员函数指针来实现,但也可以使用函数对象(functor)或std::function来增强其灵活性。模板类可以使回调接口适应各种...
在C++编程中,将类成员函数作为回调函数是一种常见的设计模式,特别是在处理异步操作、事件驱动编程或与库接口交互时。回调函数本质上是一个可以被其他代码调用的函数,它允许我们传递控制权给第三方代码并在特定...