代码:
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动态绑定和静态绑定用法实例详解" Java中的绑定机制是指将一个方法的调用与方法所在的类(方法主体)关联起来。Java中存在两种类型的绑定机制:静态绑定和动态绑定。 静态绑定是指在程序执行以前已经被绑定...
Java动态绑定和方法重载是面向对象编程中的两个核心概念,它们在Java程序设计中扮演着重要角色。这里我们将深入探讨这两个概念以及它们在实际应用中的实现。 首先,让我们了解什么是方法重载(Method Overloading)...
Java动态绑定的方法重载的实现.pdf
这篇文章我们将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto binding) 。 静态绑定机制 //被调用的类 package hr.test; class Father{ public static void f1(){ System.out.println(...
在Java编程语言中,静态绑定和动态绑定是两种不同的方法调用机制,它们与面向对象编程密切相关。这两种绑定方式决定了程序在运行时如何选择和执行特定的方法。 静态绑定(早期绑定),也称为编译时绑定,是指在程序...
### Java代码绑定时间:深入理解Oracle绑定变量的重要性 在Java编程中,特别是在处理与数据库交互的应用场景下,正确地使用数据库绑定变量对于提升系统性能、减少资源消耗具有至关重要的作用。本文将围绕“Java代码...
在Java编程语言中,静态绑定和动态绑定是两个至关重要的概念,它们关乎程序的执行效率和灵活性。了解这两个概念对于提升Java开发技能至关重要。 首先,我们来解释一下静态绑定(也称为早期绑定)。静态绑定主要涉及...
"Java多态中动态绑定原理解析" Java多态中动态绑定原理解析是Java面向对象程序设计中非常重要的特性,它让程序拥有更好的可读性和可扩展性。在Java中,多态是发生在继承关系中的,需要子类重写父类的方法。父类类型...
对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定。 静态绑定: 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。 针对java简单的可以理解为程序编译期的...
Java中的静态绑定与动态绑定是面向对象编程中的关键概念,它们决定了方法调用的方式和时机。静态绑定(也称为早期绑定或编译时绑定)和动态绑定(也称为晚期绑定或运行时绑定)是Java中多态性实现的基石。 **静态...
以下是一些关于XML和Java绑定的关键知识点: 1. **Java API for XML Processing (JAXB)**: JAXB是Java平台标准的一部分,它提供了将Java对象转换为XML文档(对象到XML),以及从XML文档还原Java对象(XML到对象)的...
### Java绑定XML架构的技术内涵 #### 一、引言 在现代软件开发中,XML(Extensible Markup Language)被广泛应用于数据交换与存储。而Java作为一种主流的编程语言,在处理XML方面有着丰富的工具和技术支持。Java...
java实现公众号绑定域名,微信消息接收和token验证功能
在Java中实现Oracle变量的绑定方法,主要是为了优化SQL语句的执行效率,减少数据库解析负担,提升系统性能。Oracle数据库在处理SQL语句时,会先进行解析,然后将解析后的SQL语句存储在共享池(Shared Pool)中。如果...
Java与XML数据绑定是将XML文档中的数据结构映射到Java对象的过程,反之亦然。这一技术使得在Java应用程序中处理XML数据变得更加便捷,避免了手动解析和构建XML字符串的繁琐工作。本篇将深入探讨Java中XML数据绑定的...
Java中的静态绑定与动态绑定是面向对象编程中的两个核心概念,它们关系到程序的编译与运行时行为。理解这两个概念对于写出高效、灵活的代码至关重要。 首先,静态绑定(也称为前期绑定或编译时绑定)是指在编译期间...
java实现对echarts 属性全动态设置 数据动态绑定。封装echarts 的绘图方法,使得js只需要getLine(data),getBar(data)等就可以绘制图形。echarts上的所有属性都可以在java中设置。
本实例是关于如何将`Sql2000`数据库中的数据与`JComboBox`进行动态绑定,通过`JDBC`(Java Database Connectivity)接口来实现数据库连接和数据交互。 首先,我们需要理解`JComboBox`的基本用法。`JComboBox`是...