代码:
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动态绑定的方法重载的实现.pdf
这篇文章我们将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto binding) 。 静态绑定机制 //被调用的类 package hr.test; class Father{ public static void f1(){ System.out.println(...
主要帮助大家理解Java中的静态绑定和动态绑定,在Java中存在两种绑定方式,一种为静态绑定,另一种就是动态绑定,亦称为后期绑定,感兴趣的小伙伴们可以参考一下
对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定。 静态绑定: 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。 针对java简单的可以理解为程序编译期的...
java代码绑定时间,请按要求填写,规范统一
xml java 绑定xml java 绑定xml java 绑定
Java中的静态绑定和动态绑定Java开发Java经验技巧共8页.pdf.zip
主要介绍了Java 静态绑定与动态绑定深入分析的相关资料,这里对java 的动态绑定和静态绑定做了详细的介绍,对其进行总结整理,需要的朋友可以参考下
主要介绍了Java多态中动态绑定原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在Java中实现Oracle变量的绑定方法 .doc 在Java中实现Oracle变量的绑定方法 .doc
java实现公众号绑定域名,微信消息接收和token验证功能
理解静态绑定与动态绑定 * Java程序从源文件创建到程序运行要经过两大步骤: * 绑定 * 绑定分类 * 绑定的其他叫法 * 静态绑定 * 识别静态绑定的三个关键字以及各自的理解 * 动态绑定 * 概念 * 代码理解 * 动态绑定的...
Java与XML数据绑定 Java与XML数据绑定 Java与XML数据绑定
java实现对echarts 属性全动态设置 数据动态绑定。封装echarts 的绘图方法,使得js只需要getLine(data),getBar(data)等就可以绘制图形。echarts上的所有属性都可以在java中设置。
Java虚拟机的动态绑定与静态绑定 大家可能都知道Java面向对象的三大特性,封装,继承,多态,其中动态绑定就与多态有关,那什么是动态绑定呢? 1.动态绑定(auto binding):也叫后期绑定,在运行时,虚拟机根据具体...