从 Java 中的基类访问子类字段

2023-12-23

我有一个名为的基类Geometry其中存在一个子类Sphere:

public class Geometry 
{
 String shape_name;
 String material;

 public Geometry()
 {
     System.out.println("New geometric object created.");
 }
}

和一个子类:

public class Sphere extends Geometry
{
 Vector3d center;
 double radius;

 public Sphere(Vector3d coords, double radius, String sphere_name, String material)
 {
  this.center = coords;
  this.radius = radius;
  super.shape_name = sphere_name;
  super.material = material;
 }
}

我有一个包含所有内容的 ArrayListGeometry对象,我想迭代它以检查文本文件中的数据是否正确读取。到目前为止,这是我的迭代器方法:

public static void check()
 {
  Iterator<Geometry> e = objects.iterator();
  while (e.hasNext())
  {
   Geometry g = (Geometry) e.next();
   if (g instanceof Sphere)
   {
    System.out.println(g.shape_name);
    System.out.println(g.material);
   }
  }
 }

我如何访问并打印Sphere's半径和中心场? 提前致谢 :)


如果您想访问子类的属性,则必须强制转换为子类。

if (g instanceof Sphere)
{
    Sphere s = (Sphere) g;
    System.out.println(s.radius);
    ....
}

不过,这并不是最面向对象的做事方式:一旦您拥有更多 Geometry 子类,您将需要开始转换为每种类型,这很快就会变得一团糟。如果要打印对象的属性,您应该在 Geometry 对象上有一个名为 print() 的方法或类似的方法,它将打印对象中的每个属性。像这样的事情:


class Geometry {
   ...
   public void print() {
      System.out.println(shape_name);
      System.out.println(material);
   }
}

class Shape extends Geometry {
   ...
   public void print() {
      System.out.println(radius);
      System.out.println(center);
      super.print();
   }
}

这样,您不需要进行转换,只需在 while 循环内调用 g.print() 即可。

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

从 Java 中的基类访问子类字段 的相关文章

  • 有没有一种独立的JAVA可以在PC上运行而无需任何操作系统

    据我所知 java 程序可以在任何操作系统上运行 任何类型的机器都有 JVM 我需要一个在我的 PC 上独立运行的 JVM 而不是在我的操作系统 Windows 或任何其他操作系统 上运行 我的意思是 JVM 的作用类似于启动 而不是操作系
  • 具有“繁忙”线程的 threadPoolExecutor 如何被终止?

    我的问题有点复杂 让我尝试彻底解释一下 但如果您需要更多详细信息 请随时询问我 我会添加它们 我最近 通过实验 了解到 如果线程连续工作 例如 while true 循环中的整数运算 则中断线程对其没有影响 话题继续进行 就像什么都没发生一
  • while循环内的递归,它是如何工作的?

    你能告诉我这段java代码是如何工作的吗 public class Main public static void main String args Strangemethod 5 public static void Strangemet
  • 删除 PriorityQueue 的顶部?

    假设我使用 Java util 中的 PriorityQueue 类 我想从 PriorityQueue pq 中删除最大的数字 我们假设它位于队列的头部 下面的工作会起作用吗 1 int head pq peek pq dequeue h
  • 将 4 个字节转换为无符号 32 位整数并将其存储在 long 中

    我正在尝试用 Java 读取二进制文件 我需要读取无符号 8 位值 无符号 16 位值和无符号 32 位值的方法 执行此操作的最佳 最快 最美观的代码 是什么 我在 C 中做到了这一点 并做了类似的事情 uint8 t buffer uin
  • 如何使用 Java 本机接口将字节数组传递到以 char* 作为参数的 C 函数中?

    所以我需要使用JNI从java调用C函数 当传入不同的数据类型 创建本机变量 头文件 共享库等等 时 我已经能够成功地做到这一点 但无法让它与字节数组一起使用 这是我的 C 函数 include
  • 为什么从 Eclipse 导出的可运行 JAR 不起作用?

    我有一个在 Eclipse 中运行良好的项目 但是 当我将其导出到可运行的 JAR 其中包含依赖项 时 它不会运行 从控制台运行 JAR 时出现的错误是 编辑 之前没有使用 jar 运行它 INFO Loading XML bean def
  • 如何将选定的项目移动到列表顶部

    List
  • Java GUI,根据actionListener更改面板

    我在两个不同的面板中添加了两个按钮 如果单击第一个按钮 则需要转到下一个面板 其中包含第二个按钮 但是当我单击第一个按钮时 该按钮没有被替换 Java GUI import java awt event ActionEvent import
  • 如何跨工作区保存 E​​clipse 启动配置文件?

    当我复制 Eclipse 项目目录时 它包含 classpath 和 project 文件 这样当我将同一目录带到另一个 Eclipse 实例时 我不必设置我的构建路径等 假设所有资源都包含在在项目中 而不是外部 但是 此过程不会导致启动配
  • 在 Android 上解析 RSS

    我有几个 RSS 源需要为我的应用程序进行解析 我按照这里的优秀教程进行操作 http w2davids wordpress com android rssatom feeds parsing with rome http w2davids
  • 没有字符串参数构造函数/工厂方法可以从字符串值 ('') 反序列化

    我在使用时遇到了 json 解析问题ObjectMapper类来自com fasterxml jackson databind包 我得到的错误是 com fasterxml jackson databind JsonMappingExcep
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 使用用户名和密码登录 LinkedIn 失败

    LinkedIn使用oauth登录其api 服务器中无法登录api 我尝试使用http请求登录linkedin并获取oauth verifier 但我得到了这样的回应 很抱歉 出现了问题 你的申请 请确保您 启用cookie并重试 或点击此
  • Selenium 查看鼠标/指针

    有什么方法可以在运行测试时真正看到硒鼠标吗 要么是 Windows 光标图像 要么是某种点或十字线或任何东西 我正在尝试使用拖放功能selenium and java in an HTML5Web 应用程序 并且能够看到光标以了解它实际在做
  • 找不到满足版本限制的“com.google.code.findbugs:jsr305”版本

    当生成签名的 APK 进行发布时 我收到此错误消息 Cannot find a version of com google code findbugs jsr305 that satisfies the version constraint
  • 尝试 Catch 性能 Java

    当捕获异常而不是进行检查时 try catch 需要多长时间 以纳秒为单位 假设消息具有用于查找的 HashMap 类型性能 try timestamp message getLongField MessageField TIMESTAMP
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get

随机推荐

  • R Shiny DT 数据表排序/过滤时如何确保行着色更新?

    我正在编写一个 R Shiny 应用程序 我在 DT 数据表中使用具有特定颜色的文本条目 当表格重新排序时 颜色不会保留在正确的行中 相反 他们留在原地 我假设我需要观察表被重新排序 过滤的事件并做出反应 我怎么做 下面的示例代码 libr
  • 更改按钮颜色 onPress(切换功能)React Native

    希望一切安好 我似乎在使用基本按钮功能时遇到困难 我所需要的只是要更改的类的状态以及每次按下按钮时要更改的按钮样式 与 TouchableHighlight 不同 我需要更改颜色以保持直到再次按下按钮 返回到原始颜色 我尝试过使用 Swit
  • Play Framework 2.1.1 部署问题

    因此 我正在尝试部署非常简单的 Play Framework 2 1 1 应用程序 但每当我通过端口命令行传递标志并应用数据库演变时 它们都会被忽略 例如 sudo play start Dhttp port 80 DapplyEvolut
  • 如何在 Maven Netbeans 项目中包含 Maven 存储库中不存在的 jar

    我正在使用 Netbeans 构建 Maven 项目 并将 JTidy java 库作为依赖项 事实证明 JTidy 不存在于任何 Maven 存储库中 因此我不能只为其添加 正常 依赖项条目 处理 Maven 项目中库的依赖关系 在存储库
  • 为什么 type(classInstance) 返回“instance”?

    我有一个方法 它接受可以是多种类型的参数 并且必须根据类型做一件事或另一件事 但是如果我检查所述参数的类型 我不会得到 真实 类型 我总是得到
  • C# 中的标准 Blowfish

    我的 C 程序使用的是标准河豚 我的 C 程序使用的是 Blowfish 加密算法here http www hotpixel net software html 两个应用程序 TCP 客户端 执行相同的操作 接收数据包 对其进行加密 然后
  • jquery 改变 P 的 insidehtml 不起作用

    我有一个我认为是使用 jQuery 的简单选择来更改段落上的一些文本 它以传统方式完美运行 即 document getElementById message text innerHTML hello 但对于 jQuery 则不然 我已经检
  • 击败或满足 OS X memset(和 memset_pattern4)

    我的问题是基于另一个SO问题 为什么 mm stream ps 会产生 L1 LL 缓存未命中 https stackoverflow com questions 9068246 why does mm stream ps produce
  • 核心数据搜索优化

    我正在我的一个基于核心数据的应用程序中开发搜索功能 并且我正在尝试收集每个人有关搜索优化的技巧 以尽可能快地实现它 搜索需要足够快 以便能够为包含 20 000 多个对象的数据库提供近乎即时的结果 到目前为止我所做的 就优化而言 实现了 W
  • 在 AJAX 调用中读取 POST 数据

    我有一些 Session 值 我通过 Ajax 调用不断更改它们 我似乎无法处理 POST 数据来处理它并设置值 我在这里传递给它的是一个字符串数组 如下面的代码所示 这是 AJAX 调用的地方 var sessionValues str
  • RIA 服务出现奇怪的错误“代码生成器遇到致命异常”

    这是我第二次在 WCF RIA 服务中遇到这个非常奇怪的问题 可悲的是 我必须两次解决这个问题 再次经历不同的困难 尽管我已经给自己留了一张纸条指出解决方案 P 无论如何 非常有用 的错误消息如下 MSBuild Microsoft Sil
  • 将 ListRow 添加到受保护工作表的表中

    当工作表受到保护时 我想将数据添加到每个工作表中每个表的最后一行 我在 ThisWorkbook 中有这段代码来保护工作表 Private Sub Workbook Open Dim wSheet As Worksheet For Each
  • 鼻子工具和 pylint

    使用nose tools并保持pylint快乐的正确方法是什么 下面的代码 This is a test import nose tools import nose tools trivial nose tools assert equal
  • 仅打印那些总和为 10 的 3 位数组 - C 程序

    Output 1 2 3 4 1 2 7 1 3 6 1 4 5 1 9 2 3 5 2 8 3 7 4 6 10 预期输出 1 2 7 1 3 6 1 4 5 2 3 5 我只想要那些总和为 10 并且只有 3 位数字的数字对 即总和为
  • Markdown 内部链接在 BitBucket README.md 中不起作用

    我在 BitBucket 项目中有一个 README md 文件 内容类似于 Table of Contents Document Organization document organization Document Organizati
  • 导入模块的标准方式

    我目前正在尝试在代码中使用 c 模块 该代码应该在 Windows MSVC 和 Linux Clang 和 或 GCC 上编译 我目前正在 Visual Studio 中进行开发 并使用 标准一致性模式 permissive 使我的代码尽
  • 将 VlcManager 与最新版本的 Vlc.DotNet 结合使用

    我正在尝试将 Vlc DotNet 库用于我的 WinForms C 应用程序 我不想使用 Vlc DotNet 库的 Core Interops 中的 VlcManager 但没有最新的文档 在早期版本中 您可以创建 VlcControl
  • CocoaPods podspec lint 失败 - 找不到文件

    我正在尝试分发我的 Pod 但我在验证时遇到问题 当我尝试检查我的 podspec 时 我得到 ERROR iOS xcodebuild path to my source file m 14 9 fatal error KeyValueO
  • Python VS代码无法与IPython内核连接

    我创建了一个新的虚拟环境并尝试连接 VS 代码 当我在 VS code 中打开包含文件和虚拟环境的文件夹时 在左下角我可以看到选择的 python 解释器 如下图所示 但是 当我运行该程序时 它显示正在连接到 IPython Kernel
  • 从 Java 中的基类访问子类字段

    我有一个名为的基类Geometry其中存在一个子类Sphere public class Geometry String shape name String material public Geometry System out print