`

接口回调(接口引用)及类的引用

 
阅读更多

 

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

分享到:
评论

相关推荐

    Java中的接口回调

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

    Delphi中制作DLL中回调函数的应用

    扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面 向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在 要进行事件触发的地方检查事件...

    接口对象的实例化在接口回调中的使用方法

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

    dot Net中抽象类与接口的区别

    • 接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。 • 接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。 • ...

    java CallBack(回调函数)

    简要说明接口回调:即使实现接口类的引用赋值给该接口申明的变量,然后该变量就可以调用接口中的方法了(当接口变量调用接口中的方法的时候,实际上我们处理的是该接口实现类中的相应的函数的实现部分)。

    .NET Core 微信支付宝WebAPI接口案例

    微信支付宝WebAPI接口案例,自己项目中用的,appsetting.json中配置好微信和支付宝的参数即可给您自己的项目调用。接口当前是开放接口,测试时以swagger展现所有接口,发布时请自行开启授权方式调用。

    C# 实例化接口对象的方法

    一、接口回调 这就是继承中的向上转型。父类 FL=new 子类();只不过这里的父类就是interface接口。(个人认为这里不管是class的override还是interface的重写,都是一样的用法) 可以把实现某一接口类创建的对象的引用...

    【05-面向对象(下)】

    •当使用接口来声明引用类型的变量时,这个引用类型的变量必须引用到其实现类的对象。 •一个类可以实现一个或多个接口,继承使用extends关键字,实现接口则使用implements关键字。 实现接口 •一个类...

    duilib+cef+echarts,cef多窗口,js与c++交互(带回调函数的)双向通信

    (3)实现了c++与js交互的能力,交互接口带有回调函数,双向通信代码完整,可直接使用 1)js调用c++,在c++端注册cpp函数,js端调用此函数,c++收到后通过回调函数将数据返给js端。 2)c++调用js,在js端注册函数,c++...

    程序集动态装载与卸载

    学习网上的相关介绍,写成的完整类,可以直接使用,用于动态装载并执行程序集中的...接口,事件,回调,尽量减少引用(为了使用一个方法到处引用一个程序集,我是觉得不太妥当) 不过在某些情况下,InvokeMember还是相当之有用的

    超级全面的Java面试题集及参考答案

    接口的意义用三个词就可以概括:规范,扩展,回调. 抽象类的意义 抽象类的意义可以用三句话来概括: 为其他子类提供一个公共的类型 封装子类中重复定义的内容 定义抽象方法,子类虽然有不同的实现,但是定义时一致的 ...

    javaSE代码实例

    9.3.3 接口引用的使用 162 9.3.4 接口中方法无法使用的修饰符 165 9.4 接口与抽象类 166 9.4.1 语法上的不同 167 9.4.2 具体含义的不同 167 9.5 基于接口的多态 169 9.6 接口与回调 170 9.7 ...

    Java学习打卡Day18

    知识内容 接口的多态:多种不同类型的引用指向同一对象时,...回调原理:现有接口的使用者,后有接口的实现者 (1)标准:接口 (2)工具:接口的使用者 (3)接口的实现者:程序员 (4)工具的调用者:程序员 今日练习

    androidLifeCycle:清除对象引用的小工具

    androidLifeCycle a little tool to clear object reference ##功能  清理各个对象的引用,清理bitmap资源,简化操作. ##需要使用的类 GarbageCollector.主要工具类,一个公开的静态方法...回调回收事件. activity:

    调用大华摄像头需引用的文件.zip

    NETClient.SetSnapRevCallBack 设置抓图回调 NETClient.Login 登录设备 NETClient.Logout 登出设备 NETClient.RealPlay 实时监视 NETClient.StopRealPlay 关闭实时监视 NETClient.CapturePicture 本地抓图 ...

    疯狂JAVA讲义

    6.7.6 闭包(Closure)和回调 215 6.8 枚举类 217 6.8.1 手动实现枚举类 217 6.8.2 枚举类入门 219 6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象方法的枚举类 224 6.9 ...

    提高C#编程水平的50个要点

    1.总是用属性 (Property) 来代替可访问的数据成员  2.在 readonly 和 const 之间,优先使用 readonly ...用委托(delegate)来实现回调(callback)  22.用事件(event)来定义外部接口  23.避免返回类内部成员的引用

    Java2实用教程.rar

    4 13 3接口回调 4 13 4接口做参数 4 14内部类 4 15匿名类 4 15 1和类有关的匿名类 4 15 2和接口有关的匿名类 4 16异常类 4 16 1try catch语句 4 16 2自定义异常类 4 17Class类 4 17 1获取类的有关信息 4 17 2使用...

    SpinnakerSDK 灰点相机 C#(2015)+halcon20.11

    相机实例化、各类参数设置(曝光、增益、触发模式、触发源、极性、白平衡)回调注册 只做了彩色相机的、黑白可参考彩色格式编辑

    基于Lua实现的脚本和服务器引擎Node-Lua.zip

    该引擎当前版本实现了以下特性: 引擎核心层同时支持同步阻塞和异步回调的api设计方案,让异步io等接口更加简单易用。调用同步和异步api时引擎核心层将会自动挂起正在执行的lua函数(coroutine),直接放弃占用的cpu...

Global site tag (gtag.js) - Google Analytics