如果我已经完成了向上转换,为什么要重写从子类调用的方法?

2023-11-23

我刚刚开始学习 java::Inheritance,并且在混合 Up-Casting 时感到困惑。

class Example{
     public void methodOne(){
        System.out.println("Example::Method_1");
     }

     public void methodTwo(){
        System.out.println("Example::Method_2");
     }
}

public class Test extends Example{

     public void methodTwo(){                  //Method overriding
        System.out.println("Test::Method_2");
     }

     public void methodThree(){
        System.out.println("Test::Method_3");
     }

    public static void main(String[] args){

        Example exa = new Test();             // UpCasting

        exa.methodOne();                      // Printing Example::Method_1
        exa.methodTwo();                      // Printing Test::Method_2
        // exa.methodThree();                 // Error : can not find symbol
 }
}

有人可以解释一下,这里发生了什么?


使用继承时,对调用其方法的对象的引用的编译时类型仅用于查看(在编译时)是否可以调用该方法。

但在调用时,编译时类型是什么并不重要。在这种情况下真正重要的是对象的运行时类型。这是Test,所以该方法在Test first.

For methodOne()它有点不同:它不会被覆盖Test,因此来自其超类的版本(Example) 被调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我已经完成了向上转换,为什么要重写从子类调用的方法? 的相关文章

随机推荐

  • 如何在下载真实图像之前显示占位符图像?

    这个想法是在下载真正的高分辨率图像之前显示图像的低分辨率版本 最好使用 img 标签 img 低分辨率图像首先可见 下载后将替换为高分辨率图像 如何才能做到这一点 是否可以编辑 img src 属性 或者应该创建其他内容 例如带背景的包装
  • 分析 C++ 多线程应用程序

    您是否使用过诸如 Intel Vtune 分析器之类的分析工具 您对 Linux 和 Windows 上的 C 多线程应用程序有何建议 我主要对缓存未命中 内存使用 内存泄漏和 CPU 使用感兴趣 我使用 valgrind 仅在 UNIX
  • angular-i18n Angular 6 国际化:如何处理变量

    我已经在这里阅读了整个文档 https angular io guide i18n 我无法弄清楚我应该如何处理这种性质的 html 标签 div class title text currentPage div 或者这样的 div clas
  • Haskell IO 测试

    我一直试图弄清楚 Haskell 中是否已经有一种可接受的测试文件 io 操作的方法 但我还没有找到任何对我想做的事情有用的信息 我正在编写一个执行各种文件系统操作的小型库 递归遍历目录并返回所有文件的列表 同步多个目录 以便每个目录包含使
  • 使用“同名”属性实现 2 个接口

    这似乎是一个合理的 也许很简单 场景 但是您将如何执行以下操作 假设我有 2 个接口 Interface ISimpleInterface string ErrorMsg get End Interface Interface IExten
  • 从 Google Cloud 流式传输视频

    我正在考虑为我的项目使用 Google App Engine 和 Google Cloud Platform 而不是使用 Amazon AWS 我需要能够大量流式传输视频 并在需要时快速扩展 App Engine 看起来非常适合负载平衡 扩
  • 如何在多线程之间共享一笔事务

    我们遇到了一个使用多线程的场景 在主线程中 执行一些逻辑并更新数据库 在某个时刻 它会调用另一个服务来更新数据库 该服务在另一个线程中运行 我们希望两个线程共享同一个事务 也就是说 任何一个线程中的操作失败 那么另一个线程中的操作也会被回滚
  • 是否有关于在 iPhone 上的 openGL ES 中加载 3D 模型的教程?

    不久前我开始接触一些 3D 建模者 现在我很好奇 如何将这样的 3D 模型带到 iPhone 或 iPad 上 以便我可以在屏幕上看到它 甚至可以通过手势旋转它 1 3D 模型的最佳文件格式是什么 2 如何将特定的 3D 模型文件加载到 o
  • 路由测试 ASP.NET MVC4

    我一直在使用 MvcRouteUnitTester codeplex and nuget 跑步自动化单元测试反对我的路线 体验一下它的功能 assert incoming route tester WithIncomingRequest F
  • gradle“构建”任务混乱

    您好 我有多项目 gradle 设置 root project sub project1 sub project2 sub project3 一切都很好 但有一件事让我发疯 在我的构建脚本中 defaultTasks build lt th
  • 保存方向变化时的片段状态

    我正在为 Android 创建一个文件管理器应用程序 下面的两个类是执行此操作的主要逻辑 我正在做的是 在 ContentList 启动时 它将 ContentListFragment 添加到 ContestList xml 中的容器布局中
  • 在 F#/OCaml 中实现类快速排序函数的尾递归版本

    是否可以实现快速排序算法的尾递归版本 通过延续模式 如果是的话 将如何实施 普通 未优化 版本 let rec quicksort list match list with gt element gt element pivot rest
  • 为每个可变参数模板参数和数组调用函数

    所以我有一些类型X typedef X 和一个模板函数f class
  • 如果出现编译时警告,是否可以让编译器提前退出,导致构建失败?

    我发现编译时警告非常有用 但我偶尔会错过它们 特别是如果它是在 CI 服务器上运行测试的拉取请求上 理想情况下 我会在项目混合文件中指定一些内容 以使编译器更加严格 我希望这对所有混合任务都有效 并且我不想必须将标志传递给命令 因为这很容易
  • STL排序使用交换还是二进制复制?

    我很难找到一个好的答案 出于某种原因 我认为 STL 排序可以使用交换来实现 以便更好地支持复杂类型 但当我最终深入研究代码时 它似乎实际上是在进行二进制复制 有人可以证实这一点吗 我想二进制副本实际上比交换更受欢迎 附带问题 是否有任何
  • 类型错误:序列项 1:需要一个类似字节的对象,找到 str

    我正在尝试使用 Python 3 中的正则表达式从文本文件中的 wiki 标题转储中提取英文标题 wiki 转储还包含其他语言的标题和一些符号 下面是我的代码 with open Users some directory title txt
  • 全局变量和作用域 - C++

    我在使全局变量起作用时遇到了小问题 我正在使用 Visual Studio 2008 和标准 C 我有两个项目 一个是静态库 第二个是使用该库的测试程序 我在 global h 中有一个全局变量 例如 ifndef GLOBAL H def
  • 关闭 Django 开发服务器中静态文件的缓存

    有没有一种简单的方法可以关闭 Django 开发服务器中静态文件的缓存 我使用标准命令启动服务器 python manage py runserver 我有settings py配置为提供静态文件 static我的 Django 项目的目录
  • Ubuntu 14.04 - Python 3.4 - pyenv:找不到命令

    我正在尝试在全新安装的 Ubuntu Server 14 04 上为 Python 3 4 创建虚拟环境 我按照 venv 模块的说明进行操作 https docs python org 3 library venv html module
  • 如果我已经完成了向上转换,为什么要重写从子类调用的方法?

    我刚刚开始学习 java Inheritance 并且在混合 Up Casting 时感到困惑 class Example public void methodOne System out println Example Method 1