zoukankan      html  css  js  c++  java
  • 接口引用指向实现类的对象

    接口引用指向实现类的对象

    //定义接口InterfaceA  
    interface InterfaceA  
    {  
     void fun();  
    }  
    //实现接口InterfaceA的类Bimpl  
    class Bimpl implements InterfaceA  
    {  
     public void fun()  
     {  
      System.out.println(“This is B”);  
     }  
    }  
      
    //实现接口InterfaceA的类Cimpl  
    class Cimpl implements InterfaceA  
    {  
     public void fun()  
     {  
      System.out.println(“This is C”);  
     }  
    }  
      
    class Test  
    {  
     public static void main(String[] args)  
     {  
      InterfaceA a;  
      a= new Bimpl();  
      a.fun();  
      a = new Cimpl();  
      a.fun();  
     }  
    }  
        //输出结果为:
        //   This is B
        //   This is C
    例子

    为什么要用接口引用指向实现类的对象?

    这种写法其实Java多态的表现形式(一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法)

    多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

    为什么一般都使用 接口引用指向子类对象 ,而不用 实现类本身 引用呢? 

    问题就在于接口可以有多个实现类,如果现在你使用这个实现类接收,也许哪一天你需要换成其它的实现类呢?

    这时你只要将new的实现类对象换成你想要的就行了, 其它地方的代码根本不需要改动。

    注意事项

    没有在接口定义的方法(实现类增加的方法)是不可以被访问到的

    在接口的实现类中该实现方法的类型和参数必须与接口中所定义的精确匹配。

  • 相关阅读:
    SmartBusinessDevFramework架构设计-1:结构简介
    C# 注销掉事件,解决多播委托链表的问题
    #import 无法打开源文件msado.tlh
    【MFC】OnInitDialog
    m_pRecordset->Open
    加L“”
    error C2065: “m_Pic”: 未声明的标识符
    存储过程不返回记录集导致ADO程序出错
    关于BSTR数据类型
    定义的函数在main中调用时提示找不到标识符
  • 原文地址:https://www.cnblogs.com/2393920029-qq/p/12056402.html
Copyright © 2011-2022 走看看