【问题标题】:What happens when a subclass object is passed to a method with a superclass parameter?当一个子类对象被传递给一个带有超类参数的方法时会发生什么?
【发布时间】:2019-08-15 18:49:05
【问题描述】:

我正在尝试将子类对象传递给具有超类参数的方法,因此我只需要创建该方法之一。我有像“if (subclassObject instanceOf certainSubClass)”这样的条件语句,所以它可以判断对象来自哪个子类。

问题是一旦将对象传递给参数,程序似乎只能将其识别为超类对象。然后我不能将它添加到 ArrayList<CertainSubClass> 类型的 ArrayList 中。

当子类对象被传递给带有超类参数的方法时,它究竟会发生什么?我怎么能解决这个问题?我宁愿不为我拥有的 3 个子类创建 3 个方法。谢谢

【问题讨论】:

  • 你能添加一些示例代码吗?
  • 请添加一些代码并正确格式化问题
  • 如果传入subclassObject,它将返回true 进行instanceof 检查,无论本地参数声明的类型是什么。错误应该在其他地方。此外,使用instanceof 通常是一种糟糕的设计气味。理想情况下,不需要检查运行时类。
  • 如果你想添加到ArrayList<CertainSubClass>,你必须对局部变量进行中间类型转换。否则它不会编译。 (您遇到编译时错误还是运行时错误?)

标签: java inheritance methods subclass superclass


【解决方案1】:

“我宁愿不为我拥有的 3 个子类创建 3 个方法。”

但是,如果您的流程对于每种情况都不同(并且您的 instanceof 检查将使其如此),那么您拥有 3种不同的方法,语义上。仅仅为了保存一些方法声明而将它们捆绑在一个方法中是一个糟糕的主意。

【讨论】:

  • 这正是。创建 3 个方法并将代码的共享部分(例如您的初始化或计算)重构为所有 3 个主要方法都可以调用的辅助方法。这集中了共享代码并保持其余部分干净清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多