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

  • 相关阅读:
    SQL Server 【应用】悲观锁和乐观锁
    .Net 【基础回顾】String脚踏两条船
    .Net 【基础回顾】特性
    .Net 【Remoting】入门
    GO单元测试
    GO协程泄漏
    Trarfik个人云主机撸一撸(一)
    Traefik TCP中间件(四)
    GO协程管理
    Traefik 开发中间件插件(六)
  • 原文地址:https://www.cnblogs.com/cielosun/p/6580871.html
Copyright © 2020-2023  润新知