为什么变量在重写时的行为与方法不同? [复制]

2024-04-14

一般来说,重写是在子类中重新定义成员含义的概念。为什么在java中重写时变量的行为不像方法?
例如:

class Base {

    int a = 10;

    void display() {
        System.out.println("Inside Base :");
    }
}

class Derived extends Base {

    int a = 99;

    @Override
    // method overriding
    void display() {
        System.out.println("Inside Derived :");
    }
}

public class NewClass {

    public static void main(String... a) {
        Derived d = new Derived();
        Base b = d;
        b.display(); // Dynamic method dispatch
        System.out.println("a=" + b.a);
    }
}

由于数据成员a是否指定了包访问权限,它也可用于Derived班级。但通常在使用基类引用调用重写方法时,会调用派生类中重新定义的方法(动态方法调度)..但对于变量来说不一样..为什么?

预期产出

内部派生:
a=99

获得的输出:

内部派生:
a=10

打印 10 - 为什么变量的行为与派生类中的方法不同?
为什么子类中不允许重写变量?


你输入了b作为一个例子Base。所以当编译器需要解析时b.a,它看起来像的定义Base的意义b.a。实例字段不存在多态性。

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

为什么变量在重写时的行为与方法不同? [复制] 的相关文章

随机推荐

  • 实体框架 7 SaveChanges

    有没有办法注册一个回调 该回调将在 EF7 中的模型保存到数据库之前调用 我想要做的是设置所有模型上的 ModifiedBy 和 ModifiedDate 属性 我不太热衷于在每次保存之前手动执行此操作 因此我正在寻找一些更通用和自动的方法
  • 为什么https只能用于登录?

    性能是唯一的问题吗 不能在整个用户会话期间使用 https 连接吗 显然重定向发生的情况较少 我发现这个相关问题http 与 https 性能对比 https stackoverflow com questions 149274 http
  • SHTML 的目的和独特性是什么?

    最近 当我看到一个带有 shtml 扩展名的网站时 我开始了解 SHTML SHTML 的目的是什么 它与 HTML 和 DHTML 有何不同 SHTML 是一种文件扩展名 可让 Web 服务器知道应使用服务器端包含 SSI 来处理该文件
  • 我可以使用 adb shell 向我的应用程序发送命令吗

    我想找到一种方法来创建可以使用 adb shell 或类似命令发送到我的应用程序的命令 这样我就可以对程序进行一些小的更改 而不必每次更改任何内容时都重新加载应用程序 有没有办法打开 adb shell 并向正在运行的应用程序发送命令 如果
  • WCF回调接口-谁关闭通道

    我在关闭回调 双工通信通道时遇到问题 疑问 这是我的原型 WCF 接口 ServiceContract CallbackContract typeof IMyInterfaceCallback public interface IMyInt
  • 如何使用 rhino 导入其他 javascript 文件

    我一生都无法弄清楚如何在Rhino下的javascript中导入javascript文件 基本上 我想做的就是导入 some file js 并能够使用其中范围内的内容 我一直在尝试弄乱 Context currentContext com
  • Egit - 创建分支时正确设置远程跟踪

    当我使用 EGit 从远程分支创建新分支时 我得到了错误的远程跟踪设置 我从远程分支 refs heads master 创建本地分支 feature1 并立即推送到上游 在我的 git config 文件中配置以下远程跟踪 branch
  • 如何重置对模拟类方法的期望?

    抱歉 如果这很简单 我对 ruby 和 rspec 都是新手 似乎 rspec 是一个非常 晦涩 的世界 特别是来自 net 背景时 在我的 规范 中 我有 before each do expect File to receive exi
  • 将包含无效字符的嵌套字段从 Spark 2 导出到 Parquet [重复]

    这个问题在这里已经有答案了 我正在尝试使用 Spark 2 0 2 将 JSON 文件转换为镶木地板 JSON 文件来自外部源 因此架构在到达之前无法更改 该文件包含属性映射 在我收到文件之前 属性名称是未知的 属性名称包含不能在 parq
  • 树视图虚拟化

    我们正在尝试找到一种虚拟化的好方法TreeView 数据并不是真正的问题 因为它非常轻 每个项目大约 16 字节 问题是我们可能有数以万计的数据 尽管实际数据只占用 160 kb 内存 但树视图项目确实使用更多的内存 我们现在已经尝试使用
  • 如果 Address 嵌套在 User 中,为什么我必须保留这两个对象?

    我想更好地熟悉 JPA 所以我创建了一个非常简单的项目 我有一个用户类和一个地址类 看来我必须坚持两者 即使我将地址添加到我的用户类中 User import javax persistence import java util HashS
  • 严重:Web 应用程序 [/restapp] 中的 Servlet [Jersey Web Application] 引发了 load() 异常

    这是我的 REST API 项目 我不知道这个错误是什么 我正在尝试从两天开始解决这个错误 现在我已经筋疲力尽了 有人可以帮助我吗 网页正在加载 但控制台中显示此错误 SEVERE Servlet Jersey Web Applicatio
  • Bazaar 上的 SSH 权限被拒绝

    我是芭莎的新手 我正在尝试设置我的 SSH 密钥 但我总是收到 没有权限 以下是我所做的事情 打开 PuTTYgen 点击 生成 围绕鼠标指针移动 添加密码 密码 点击 保存公钥 保存公钥 点击 保存私钥 保存私钥 Private Key
  • 将案例类转换为另一个递归结构的相同案例类

    我正在尝试使用 Shapeless 来转换案例类 如下所示 case class A int Int str String case class B a A str String case class AnotherA int Int st
  • ffmpeg流rc缓冲区下溢

    目前我正在使用开源工具 ffmpeg ffserver 建立一个屏幕共享平台 分享之初一切都很好 大约 1 1 2 分钟后 我在输出中得到以下异常 flv 0x3a47aa0 rc buffer underflow flv 0x3a47aa
  • 自定义模块未显示在应用程序列表中

    我正在尝试将模块从 odoo 8 安装到 odoo 9 我刚刚将整个文件夹复制到addonsodoo 9 中的文件夹并希望我能以某种方式installodoo 9 中的模块 但它没有显示在要安装的应用程序列表中 odoo 的结构是否有任何变
  • 如何在 swi-prolog 的 prolog 文件中运行 prolog 查询?

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • 两种表结构的区别

    我对这两种结构很困惑 这两个表各有什么优缺点 哪一个更好 为什么 TABLE1 反模式 在常见情况下 第二个表是反模式在数据库设计的背景下 而且 更重要的是 它有特定的名称 实体 属性 值 EAV 在某些情况下 使用这种设计是合理的 但这种
  • css显示表格单元格需要百分比宽度

    我已经处于需要对 div 元素使用 display table cell 命令的位置 但是我发现只有在宽度上添加百分比时 单元格 才能正常工作 在这个小提琴中http jsfiddle net NvTdw http jsfiddle net
  • 为什么变量在重写时的行为与方法不同? [复制]

    这个问题在这里已经有答案了 一般来说 重写是在子类中重新定义成员含义的概念 为什么在java中重写时变量的行为不像方法 例如 class Base int a 10 void display System out println Insid