Java 中的继承和转换

2023-12-31

我有一个关于 Java 中的继承和转换的问题。我有以下两个示例类和一个测试类,我在课后陈述我的问题:

public class Automobile {
    public int var;

    public Automobile () {
        var = 1;
    }

    public String toString () {
        return "AUTOMOBILE: " + var;
    }
}


public class Porsche extends Automobile {
    public int var;

    public Porsche () {
        var = 2;
    }

    public String toString () {
        return "PORSCHE: " + var;
    }
}

public class Test {
    public static void main (String [] args) {
        Porsche p = new Porsche();
        Automobile a = new Automobile();

        System.out.println ("(Automobile) p = " + (Automobile)p);

        System.out.println ("(Automobile) p.var = " + ((Automobile)p).var); 
    }
}

输出是:

(Automobile) p = PORSCHE: 2
(Automobile) p.var = 1

我不明白为什么在第二个语句中我们有 1。不应该是 2 吗?因为在我在第一个语句中将 p 转换为 Automobile 之后,我仍然得到PORSCHE: 2作为代表p- 我的理解如下:

尽管如此我已经投了p到汽车p保持其“本性”——p是 Porsche 类的对象,但因为 Porsche 扩展了 Automobile,所以我们可以说 p 也是一个 Automobile。因此,当我们将其显式转换为 Automobile 时,它​​会继续使用其方法 - 在 我们的案例方法toString()保时捷定义的。

另一方面,如果我写的是正确的,那么第二个 print 语句应该给出 2 而不是 1。

现在这对我来说似乎是矛盾的,但由于这在 Java 中有效,所以我似乎不明白在转换和继承过程中发生了什么。


我相信你实际上不能覆盖 Java 中的变量。子类实际上“隐藏”了变量var.

当你投射到Automobile,您将获得超类版本var多变的。但是,那toString()方法仍在查看实例的版本var多变的。

如果您删除了public int var从保时捷子类来看,它应该按预期工作。

应该注意的是,使用公共实例变量不是一个好习惯,您应该始终创建 getter / setter 以具有适当的封装 http://home.cogeco.ca/~ve3ll/jatutor4.htm.

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

Java 中的继承和转换 的相关文章

  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 如何使用 Java 处理 Selenium WebDriver 中的新窗口?

    这是我的代码 driver findElement By id ImageButton5 click Thread sleep 3000 String winHandleBefore driver getWindowHandle drive
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 如何在 Java 中测试一个类是否正确实现了 Serialized(不仅仅是 Serialized 的实例)

    我正在实现一个可序列化的类 因此它是一个与 RMI 一起使用的值对象 但我需要测试一下 有没有办法轻松做到这一点 澄清 我正在实现该类 因此在类定义中添加 Serialized 很简单 我需要手动序列化 反序列化它以查看它是否有效 我找到了
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s

随机推荐

  • 清除淘汰验证错误

    我有一个使用 Knockout js 并使用 Knockout Validation 的页面设置 在页面加载期间 我在选择框中放置了另一个插件 该插件会触发更改 从而触发验证 我需要能够使用 JS 清除该错误 以便我可以从外观新颖的 UI
  • 为什么计算斐波那契数列的复杂度是 2^n 而不是 n^2?

    我试图使用递归树找到斐波那契数列的复杂性并得出结论height of tree O n 最坏的情况下 cost of each level cn hence complexity n n n 2 怎么会这样O 2 n 朴素递归斐波那契的复杂
  • Linq 连接参数化的不同键

    我正在尝试基于动态键 LINQ 两个表 用户可以通过组合框更改密钥 键可能是钱 字符串 双精度数 整数等 目前我得到的数据很好 但没有过滤掉双精度数 我可以在 VB 中过滤双精度值 但速度很慢 我想立即在 LINQ 查询中执行此操作 这是数
  • libc++ std::istringstream 不会引发异常。漏洞?

    配置完后std istringstream抛出异常时failbit已设置 我在 libc 中没有发生任何异常 这是在 linux 下 使用 libcxxrt 支持编译的 libc 我认为这是 libc 或 libcxxrt 中的错误 inc
  • python导入具有相同根包名和不同位置的不同子包

    我想知道是否有人可以阐明这一点 我们有多个具有相同根包的包库 例如a 我也有包a b位于 X 和包中a c位于Y X和Y都在我的PYTHONPATH当我这样做时 import a c import a b 我收到错误 No module n
  • 当 ModelState 无效时保留下拉信息

    我的 DropDownLists 遇到一些问题 因为当我发布信息并且我的模型无效时 它会返回 空 页面 从而触发错误 就像这个问题 https stackoverflow com questions 3393521 the viewdata
  • Azure Functions - 拥有 host.json 和 local.settings.json 的目的是什么

    我可以看到两个 json 文件 host json 和 local settings json 已添加到 Azure Function 目录中 主机 json version 2 0 logging applicationInsights
  • 按月将带有 NSDate 对象的 NSArray 排序到 NSDictionary 中

    我正在构建一个UITableView并想按月分组 以便我可以将这些字符串作为我的节标题 例如 February 2013 Item 1 Item 2 January 2013 Item 1 Item 2 我有一个NSArray其中包含具有
  • Windows 7 上的 Microsoft Access 文本 ODBC 驱动程序

    我创建了一个 Delphi 应用程序 它利用 ODBC 数据源访问 csv 格式的文本文件 该驱动程序是 Microsoft Access Text Driver 但是 当我在 Windows 7 计算机上部署应用程序时 它无法工作 因为该
  • 应用程序先前由“root”运行后,QSerialPort 无法打开 tty [重复]

    这个问题在这里已经有答案了 我有一个应用程序 使用QSerialPort 从串行端口读取和写入 当我运行这个应用程序时root用户 然后以非 root 用户身份再次运行它 我不再能够写入串行端口 收到以下错误 QIODevice write
  • React useId 创建无效的选择器

    我正在尝试通过 id 获取元素 这是重现错误的示例代码 function MyComponent const myId useId useEffect gt const myComponentDOMElement document quer
  • 如何删除 git 用户属性?

    我不小心输入了以下错误的 git 命令 git config global user mail email protected cdn cgi l email protection 现在当我输入时我会看到一个额外的属性git config
  • 包标识符无法从当前值错误更改

    我制作了 iPhone 应用程序 现在我想将这个应用程序上传到 Appstore 当我尝试从组织者上传存档文件时 它向我显示以下错误 Bundle identifier in my target project is com Appname
  • 如何获取调用函数的名称?

    我正在使用 gnu 工具链 如何在运行时找到函数的调用者 例如 许多函数使用函数指针调用函数 B 现在 每当 B 被呼叫时 我想打印呼叫者的姓名 我需要这个来调试某个问题 如果您使用的是 GNU 则可以使用回溯 http www kerne
  • 关于操作系统,关于页表条目状态位

    在电影里社交网络马克 扎克伯格上课时 老师问了这样一个问题 假设我们有一台计算机 具有 16 位虚拟地址 页大小为 256 字节 系统使用从地址十六进制 400 开始的一级页表 您可能需要 DMA 直接内存访问 在您的 16 位系统上 谁知
  • 捕获 Mac 屏幕

    用cocoa录制mac屏幕的最佳方法是什么 我知道苹果开发人员参考库中有很多示例 SonOfGrab 解释了如何使用石英捕获屏幕 但也指出使用它每秒捕获许多帧的速度不够快 OpenGLScreenSnapshot 具有相同的结果 但速度也不
  • 如何使用 TortoiseSVN 根据修订版之间的差异创建补丁?

    我正在开发一个项目 其中使用 Subversion 来维护版本控制 我使用 TortoiseSVN 访问项目存储库 在项目的两个修订版之间进行了一些更改 我们将其称为 rev1 和 rev2 我希望能够将这些更改应用到暂时无法访问存储库的工
  • Rspec:如何在辅助规范中规范 request.env?

    在我的帮助模块中 我有 def abc url if request env HTTP USER AGENT do something end end 在我的规范文件中 我有 describe abc do before each do m
  • 如何利用 NumPy 的功能来修复和优化这段非常简单的“生命游戏”代码?

    import numpy as np from matplotlib import pyplot as plt from matplotlib import animation from random import randint arra
  • Java 中的继承和转换

    我有一个关于 Java 中的继承和转换的问题 我有以下两个示例类和一个测试类 我在课后陈述我的问题 public class Automobile public int var public Automobile var 1 public