`

Java 动态绑定

    博客分类:
  • Java
阅读更多

代码:

 

public class Parent {
 
    public void validate(){  
             System.out.println("parent validate");
             customer();
             customer("ssssss");  
 }
    public void customer(){  
            System.out.println("parent customer");  
 }
     public void customer(Object s){  
            System.out.println("parent customer string");  
 }
    public void shout(Object word){   
            System.out.println("parent string shout:"+word);;  
    }  

  
}

 

public class Child extends Parent
 
   /* public void validate(){  
      System.out.println("child validate");
       customer();  
 }*/
    public void customer(){  
             System.out.println("Child customer");  
 }
    public void customer(String s){
  
            System.out.println("Child customer string");
  
 }
 
    public void shout(String word){  
               System.out.println("Child string shout:"+word);;  
    } 
}

 

 public static void main(String[] args) {
       Parent c= new Child();
       c.validate();
      
      
       Child son=new Child();;  
       Parent father = son;           
       son.shout("hello");;  
       father.shout("hello");
      
      
       String s="  String test";
       Child son2=new Child();;  
       Parent father2=son2;            
       son2.shout(s);;  
       father2.shout(s);
      
       Object s3=null;
       Child son3=new Child();;  
       Parent father3=son3;           
       son3.shout(s3);;  
       father3.shout(s3);
      
       String s4=null;
       Child son4=new Child();;  
       Parent father4=son4;           
       son4.shout(s4);;  
       father4.shout(s4);
      
       Collection cl=new LinkedList();
       cl.add("www");
       cl.add("jjjj");
       cl.add("kkk");
       List l=(List)cl;
       int i=1;
       System.out.println(cl.remove(i));//???为什么返回false,而不实现动态绑定;
       System.out.println(l.remove(i));

    }

 

 

什么是多态的动态绑定?当父类引用指向子类对象的时候,能调用子类中所覆盖的父类方法,可是怎样才是覆盖呢?答案是函数签名相同。
Collection 中有boolean remove(Object o)方法,而List有E remove(int index)和boolean remove(Object o);其中E remove(int index)并没有覆盖Collection中的任何方法,它和boolean remove(Object o)只是函数名字相同而函数签名不同(参数类型不同)。

当你调用c.remove(i)的时候,在Collection接口中只找到了boolean remove(Object o)符合函数声明,于是实际上动态绑定了LinkedList的boolean remove(Object o),并将i自动装箱成Object类型,返回值当然是boolean值了。
而当你调用l.remove(i)的时候,他根据参数类型在List接口找到最适合的函数是E remove(int index),于是绑定了LinkedList的E remove(int index)方法,返回了对象的值。

对象C的声明是一个Collection的接口,而Collection接口中的remove方法的是这样的
 boolean remove(Object o);
而对象l的声明是一个List接口,List接口是扩展自Collection接口的.
在List接口中的remove方法有
E remove(int index);
boolean remove(Object o);

所以,你的代码中的C对象调用的remove方法中LinkedList中的 boolean remove(Object o);
返回的是Boolean类型
而l对象调用的是remove方法是LinkedList中的E remove(int index);返回的是移除的对象
分享到:
评论

相关推荐

    Java动态绑定和内联

    Java动态绑定和内联是Java编程中的两个关键概念,它们对于理解Java的面向对象特性,尤其是多态性和性能优化有着重要的作用。 动态绑定,又称晚期绑定或运行时绑定,是Java语言的一个核心特性。它指的是在运行时而非...

    Java动态绑定和静态绑定.doc

    在Java编程语言中,动态绑定和静态绑定是两个重要的概念,它们涉及到方法调用和多态性。了解这两个概念对于深入理解面向对象编程至关重要。本文将详细探讨它们的区别,并通过实例来阐述它们的工作原理。 首先,让...

    java动态绑定和静态绑定用法实例详解

    "Java动态绑定和静态绑定用法实例详解" Java中的绑定机制是指将一个方法的调用与方法所在的类(方法主体)关联起来。Java中存在两种类型的绑定机制:静态绑定和动态绑定。 静态绑定是指在程序执行以前已经被绑定...

    Java动态绑定的方法重载的实现.zip

    Java动态绑定和方法重载是面向对象编程中的两个核心概念,它们在Java程序设计中扮演着重要角色。这里我们将深入探讨这两个概念以及它们在实际应用中的实现。 首先,让我们了解什么是方法重载(Method Overloading)...

    Java动态绑定的方法重载的实现.pdf

    Java动态绑定的方法重载的实现.pdf

    Java动态绑定机制的内幕

    这篇文章我们将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto binding) 。  静态绑定机制 //被调用的类 package hr.test; class Father{ public static void f1(){ System.out.println(...

    理解Java中的静态绑定和动态绑定

    在Java编程语言中,静态绑定和动态绑定是两种不同的方法调用机制,它们与面向对象编程密切相关。这两种绑定方式决定了程序在运行时如何选择和执行特定的方法。 静态绑定(早期绑定),也称为编译时绑定,是指在程序...

    java代码绑定时间

    ### Java代码绑定时间:深入理解Oracle绑定变量的重要性 在Java编程中,特别是在处理与数据库交互的应用场景下,正确地使用数据库绑定变量对于提升系统性能、减少资源消耗具有至关重要的作用。本文将围绕“Java代码...

    Java中的静态绑定和动态绑定Java开发Java经验技巧

    在Java编程语言中,静态绑定和动态绑定是两个至关重要的概念,它们关乎程序的执行效率和灵活性。了解这两个概念对于提升Java开发技能至关重要。 首先,我们来解释一下静态绑定(也称为早期绑定)。静态绑定主要涉及...

    Java多态中动态绑定原理解析

    "Java多态中动态绑定原理解析" Java多态中动态绑定原理解析是Java面向对象程序设计中非常重要的特性,它让程序拥有更好的可读性和可扩展性。在Java中,多态是发生在继承关系中的,需要子类重写父类的方法。父类类型...

    Java方法的动态绑定与静态绑定

    对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定。  静态绑定:  在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。  针对java简单的可以理解为程序编译期的...

    Java 静态绑定与动态绑定深入分析

    Java中的静态绑定与动态绑定是面向对象编程中的关键概念,它们决定了方法调用的方式和时机。静态绑定(也称为早期绑定或编译时绑定)和动态绑定(也称为晚期绑定或运行时绑定)是Java中多态性实现的基石。 **静态...

    xml和java绑定

    以下是一些关于XML和Java绑定的关键知识点: 1. **Java API for XML Processing (JAXB)**: JAXB是Java平台标准的一部分,它提供了将Java对象转换为XML文档(对象到XML),以及从XML文档还原Java对象(XML到对象)的...

    Java绑定XML架构的技术内涵

    ### Java绑定XML架构的技术内涵 #### 一、引言 在现代软件开发中,XML(Extensible Markup Language)被广泛应用于数据交换与存储。而Java作为一种主流的编程语言,在处理XML方面有着丰富的工具和技术支持。Java...

    java公众号绑定域名,微信消息接收和token验证

    java实现公众号绑定域名,微信消息接收和token验证功能

    在Java中实现Oracle变量的绑定方法 .doc

    在Java中实现Oracle变量的绑定方法,主要是为了优化SQL语句的执行效率,减少数据库解析负担,提升系统性能。Oracle数据库在处理SQL语句时,会先进行解析,然后将解析后的SQL语句存储在共享池(Shared Pool)中。如果...

    Java与XML数据绑定

    Java与XML数据绑定是将XML文档中的数据结构映射到Java对象的过程,反之亦然。这一技术使得在Java应用程序中处理XML数据变得更加便捷,避免了手动解析和构建XML字符串的繁琐工作。本篇将深入探讨Java中XML数据绑定的...

    《剑指offer》Java理解静态绑定与动态绑定.pdf

    Java中的静态绑定与动态绑定是面向对象编程中的两个核心概念,它们关系到程序的编译与运行时行为。理解这两个概念对于写出高效、灵活的代码至关重要。 首先,静态绑定(也称为前期绑定或编译时绑定)是指在编译期间...

    echarts 属性全动态设置 数据动态绑定

    java实现对echarts 属性全动态设置 数据动态绑定。封装echarts 的绘图方法,使得js只需要getLine(data),getBar(data)等就可以绘制图形。echarts上的所有属性都可以在java中设置。

    JComboBox动态绑定数据库

    本实例是关于如何将`Sql2000`数据库中的数据与`JComboBox`进行动态绑定,通过`JDBC`(Java Database Connectivity)接口来实现数据库连接和数据交互。 首先,我们需要理解`JComboBox`的基本用法。`JComboBox`是...

Global site tag (gtag.js) - Google Analytics