在Java中,为什么 ((A)b).disp() 调用派生类方法 disp() 而不是基类方法 disp() ?

2023-12-05

我正在学习 Java,是一个初学者...请帮我找出为什么这不起作用...

在下面的程序中,我的目标是从主方法调用基类方法,而不在派生类方法中使用 super 关键字。

如代码所示,main方法中的 ((A)b).num 工作得很好,并且按预期输出 100,但是 ((A)b).disp() 输出 B 方法中的内容,而不是 A 方法中的内容。

class A
{
    int num=100;

    public void disp()
    {
    System.out.println("Disp() of A:");
    System.out.println(num);
    }

}

class B extends A
{
    int num=200;

    public void disp()
    {
    System.out.println("Disp() of B:");
    super.disp();              //100
    System.out.println( num );  //200
    }

}

class ques
{

    public static void main(String a[])
    {
    B b=new B();

    b.disp();         

    System.out.println();
    ((A)b).disp();                          //doesn't work

    System.out.println();
    System.out.println(((A)b).num);         //works
    }

}

输出是:

Disp() of B:
Disp() of A:
100
200

Disp() of B:
Disp() of A:
100
200
100

但我的预期输出是:

Disp() of B:
Disp() of A:
100
200


Disp() of A:
100

100

谁能帮我找出这个输出的原因。

为什么 ((A)b).num 工作正常而 ((A)b).disp() 没有按预期工作......

而且这不会给出编译错误......!提前致谢.. :)


必须这样才能保留派生类的语义。

假设 A 有一个整数属性名称value,而 A.alter() 是更改该值的方法。假设 B 扩展了 A 并重写了该方法,并且 B 提供了属性的额外保证value总是积极的。 A.alter() 有时可能会导致该值为负数,但 B.alter() 永远不会。

如果 ((A)b).alter() 对 B 类型的对象调用 A.alter() 方法,则结果可能是具有负值的 B:B 应该具有的保证将被破坏。

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

在Java中,为什么 ((A)b).disp() 调用派生类方法 disp() 而不是基类方法 disp() ? 的相关文章

随机推荐

  • 按对列结果查询

    目前我的数据集由 4 列组成 id status user id created date 所以一段时间后数据可以是这样的 1 LOGIN 2019 07 16 07 06 55 Bob 2 LOGOUT 2019 07 16 07 29
  • 显示网页上的幻灯片数量

    我编写了一个自定义滑块 如本代码笔所示 http codepen io anon pen NqQpjG我添加了额外的功能来计算移动的幻灯片总数 例如 如果幻灯片总数为 8 则起始值将如下所示 Slides 0 8 当一张幻灯片移动时 它会变
  • 将源代码多次传递到 cpp

    基本上 我试图将源代码两次传递给 gcc 的 cpp 然后直接传递给 gcc 的 c 编译器 至于为什么 我相信有些东西永远无法在宏中内联 这是一个例子 say i want to make an inline definition tha
  • magento后端无法登录致命错误getBlockName

    在 Magento 1 8 上运行 我正在复制到测试生产站点 但在后端我无法登录 这是错误消息 Fatal error Call to a member function getBlockName on a non object in va
  • 从 gtk 树视图的选定行获取数据 - gtkmm,c++

    我有一个 GTK 应用程序 它的窗口带有treeview和一个按钮 单击按钮时 我需要从所选行的第一列 也是唯一一列 获取数据treeview 这是列的类 class ModelColumns public Gtk TreeModel Co
  • 为什么我安装了 opencv3 包却无法导入?

    我目前正在运行 Python 3 5 并使用 Anaconda 的 Spyder 作为我的 IDE 我在 Windows 机器上运行这个 当我写作时import cv3在我的代码顶部 它返回错误ImportError No module n
  • jQuery 和 jQuery Mobile:点击与 touchstart、touchend、touchmove 和 click?

    是否jQuery 移动点击相当于向元素添加事件侦听器 如下所示 myElement addEventListener touchstart touchStartHandler false 如果是这样 那么其余的正常事件 例如touchmov
  • 当仅限于 Android 时,YouTube API 密钥会出现 500 错误

    我在使用仅在 Android 上安全使用的密钥查询 YouTube 搜索 API 时遇到了非常困难的情况 看来当我删除该密钥的限制时 该请求工作正常 当我尝试锁定它并发送证书和包标头时 如中所述这个解决方案 我收到一个非常无用的 500 错
  • 解决 goroutine 死锁

    我一直在尝试解决我在Golang并发中遇到的这个简单问题 我一直在搜索所有可能的解决方案 但没有发现任何特定于我的问题的解决方案 或者我可能会错过一个 这是我的代码 package main import fmt time func pro
  • 如何在 WPF 绑定中替换 StringFormat 中的字符串

    我需要更换一个 with n 新行 在我的字符串中 我想在客户端执行此操作StringFormat
  • R 无法使用 hist() 因为由于负十进制数而导致“内容不是数字”?

    我是 R 新手 我正在尝试使用 hist 绘制 100 000 个数字列表的直方图 如下所示 0 764 0 662 0 764 0 019 0 464 0 668 0 464 但我不能这样做 因为 R 抱怨内容不是数字 这是我尝试过的 我
  • 上传文件时nodejs和express错误,“无法读取未定义的属性”

    编辑 为了清楚起见 我希望将文件上传到服务器 无论是图片还是一些 txt 我已经查看了与此类似的其他常见问题 但无法缓解我的问题 目的是创建文件上传功能 前端看起来像这样 div class holdingDiv div
  • 位置粘在头上

    你可能知道 position sticky 已登陆Webkit demo 到目前为止 我可以看到这只适用于父元素 但我想知道是否可以在带有表格的滚动 div 中使用它 所以它需要 监听 的滚动事件div 不是table 我知道我可以使用 j
  • 线程 NSTimer

    我知道有关此主题的许多问题 因为我自己之前也问过一个问题 但是 我的问题现在似乎与线程部分更相关 我有以下2种方法 void restartTimer NSAutoreleasePool pool NSAutoreleasePool all
  • 德尔福嵌入式 Chrome

    有人有使用delphi嵌入式chrome的经验吗 Delphi铬嵌入式 如何访问其 HTML 文档 就像给 Editbox 赋值一样 See 演示 guiclient目录为例 更新 设置输入字段文本的示例iGoogle page proce
  • TCP 连接似乎接收到不完整的数据

    我已经设置了一个简单的 TCP 文件传输 一切似乎都工作正常 除了接收到的文件大小偶尔小于发送的文件大小 接收到的文件的大小似乎没有任何规律 在下面的代码中 请注意典型的客户端 服务器滚动是相反的 我的客户端代码如下 define kMax
  • VBA 中的类定义如何工作

    当我尝试学习 VBA 时 课程给我带来了一些沉重的痛苦 以下是我的一本 VBA 书籍 VBA 和宏 Microsoft Excel 2010 Bill Jelen 第 497 页 中的一些内容 这绝对是奇异而奇特的 我们在VBE中打开一个类
  • 嵌入 Python:对“_imp__Py_Initialize”的未定义引用

    我正在尝试将 python 3 7 0 嵌入到 C 应用程序中并使用 MinGW 进行编译 include Dependencies include Python h int main PyObject myPointer Py Initi
  • Java 使用 JAXB 解组对象列表

    我的 XML 如下所示
  • 在Java中,为什么 ((A)b).disp() 调用派生类方法 disp() 而不是基类方法 disp() ?

    我正在学习 Java 是一个初学者 请帮我找出为什么这不起作用 在下面的程序中 我的目标是从主方法调用基类方法 而不在派生类方法中使用 super 关键字 如代码所示 main方法中的 A b num 工作得很好 并且按预期输出 100 但