博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java父类对象调用子类实体:方法重写与动态调用
阅读量:4506 次
发布时间:2019-06-08

本文共 843 字,大约阅读时间需要 2 分钟。

众所周知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<但是不能自动向下转型,向下转型的方法需要人工去定义。

转载于:https://www.cnblogs.com/cielosun/p/6580871.html

你可能感兴趣的文章
SpringBoot 密码MD5加密
查看>>
Mac MySQL启动不了解决办法(MySQL卸载重新安装教程)
查看>>
连通块
查看>>
servlet.txt笔记
查看>>
jquery设置select选中
查看>>
今天说一下DML触发器的顺序
查看>>
Memcached学习(一)--网络模型
查看>>
FragmentTransaction add 和 replace 区别 转
查看>>
jQuery 效果方法
查看>>
STM32物联网通信WIFI
查看>>
java反射案例详解
查看>>
MAGENTO 与 reindexer
查看>>
Oracle笔记之——常用的函数及脚本
查看>>
SQLServer2008 关于Having
查看>>
关于express中的中间件
查看>>
mtr语言真是逆天了
查看>>
input模糊匹配 组件赋值问题
查看>>
Python风格指南
查看>>
循序渐进开发WinForm项目(6)--开发使用混合式Winform模块
查看>>
数字,字符串,列表及其内置方法
查看>>