Java父类对象调用子类实体:方法重写与动态调用
Posted CieloSun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java父类对象调用子类实体:方法重写与动态调用相关的知识,希望对你有一定的参考价值。
众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢?
这里我先给一个例子
class Father{ public void announce(){ System.out.println("Father"); } } class Child extends Father{ @Override public void announce(){ System.out.println("Child"); } } public class Hello { public static void main(String[] args){ System.out.println("Hello"); Father father=new Child(); father.announce(); } }
这段代码中,我们把一个子类的对象赋值给了父类的句柄,之后调用已经被子类重载的方法,我们会得到的结果如下:
Hello
Child
我们可以看到,使用这个父类handle,我们调用的实际上是子类的announce方法。知道了这个特性简直可以搞事。
这里我们就要介绍一个概念:动态调用
动态链接是指,当一个方法仅在父类中实现而没有在子类中实现是,我们调用父类中方法。而当一个方法在父类和子类中都进行了实现时,无论handle的类型,我们都会调用子类的方法。但这个方法必须是在父类中定义过的,否则则无法通过父类handle去调用。
另外需要注意的是Java中能够自动向上转型,即可以把子类对象赋值给父类handle<但是不能自动向下转型,向下转型的方法需要人工去定义。
以上是关于Java父类对象调用子类实体:方法重写与动态调用的主要内容,如果未能解决你的问题,请参考以下文章
java中,子类能调用父类中所有方法、对象吗?是不是父类也能调用子类所有……?
Scala核心编程_第08章 面向对象编程(中级补充)--java动态绑定与静态绑定