您的当前位置:首页Java父类对象调用子类实体:方法重写与动态调用

Java父类对象调用子类实体:方法重写与动态调用

2022-02-13 来源:爱问旅游网
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(); }}

这段代码中,我们把⼀个⼦类的对象赋值给了⽗类的句柄,之后调⽤已经被⼦类重载的⽅法,我们会得到的结果如下:HelloChild

我们可以看到,使⽤这个⽗类handle,我们调⽤的实际上是⼦类的announce⽅法。知道了这个特性简直可以搞事。这⾥我们就要介绍⼀个概念:动态调⽤

动态链接是指,当⼀个⽅法仅在⽗类中实现⽽没有在⼦类中实现是,我们调⽤⽗类中⽅法。⽽当⼀个⽅法在⽗类和⼦类中都进⾏了实现时,⽆论handle的类型,我们都会调⽤⼦类的⽅法。但这个⽅法必须是在⽗类中定义过的,否则则⽆法通过⽗类handle去调⽤。

另外需要注意的是Java中能够⾃动向上转型,即可以把⼦类对象赋值给⽗类handle<但是不能⾃动向下转型,向下转型的⽅法需要⼈⼯去定义。

因篇幅问题不能全部显示,请点此查看更多更全内容