【问题标题】:How to differentiate Sub classes? [duplicate]如何区分子类? [复制]
【发布时间】:2019-10-05 11:30:14
【问题描述】:

我有父类和两个子类。 我想在我的方法checkType(List<Parent>) 中创建一个条件 我的主要课程 Parent.getClass() 是返回 Child1 还是 Child2 假设我有存储所有对象的列表。 所以 checkType 方法可以计算 List 中有多少 child1 和 child2。

abstract class Parent
{
...

   public Parent getClass
   {
     ...
   }

}

class Child1 extends Parent
{
...    
}

class Child2 extends Parent
{
... 
}

【问题讨论】:

  • 那么checkType在哪里以及如何使用它?
  • 在我的主课上说吧。我想比较它是否是child1然后返回true
  • 对不起,我不清楚你在这里想要达到什么目的。我看不出getClass 返回Parent 类型的对象的意义,对于您所描述的,它应该是一个字符串,不应该是吗?如果您想在 Main 类中知道 Parent 的某个实例的具体类型是什么,只需在那里使用 instanceof ......但是在 Parent 类中方法 getClass 的意义何在?请让您的问题更清楚,以便更好地帮助您。
  • 是的,这就是我想问的。谢谢
  • @lealceldeiro 我已经编辑了我的问题。我知道使用 instanceOf 是答案。我只是想让大家更清楚。

标签: java inheritance return-type


【解决方案1】:

在父类中创建一个函数checkType()。您可以在子类中重写此函数以表示它是哪个子类。例如,

abstract class Parent {
  public abstract String checkType();
} 
public class Child1 extends Parent {
  public String checkType() {
    return "Child 1"
}
public class Child2 extends Parent {
  public String checkType() {
    return "Child 2"
} 

【讨论】:

  • 有效,但完全没有必要。您可以使用 instanceof 来检查任何引用是否属于特定类。你在重新发明轮子,而且很糟糕。
  • 是的,我一开始并没有想到这一点。并且,我对此有不同的看法,在某些情况下,我必须知道子类的“类型”,而实际上却不知道它们自身内外的所有子类。但是,是的,如果子类是已知的,那么这应该是公认的答案。 ✌
  • @GhostCat,您能否详细说明为什么您认为这是“不好的”(除了重新发明轮子)?
【解决方案2】:
if (obj1 instanceof Child1) {
    System.out.println(Child1.class.toString());
} else if (obj1 instanceof Child2) {
    System.out.println(Child2.class.toString());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2018-04-01
    • 2020-01-15
    • 2017-05-06
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多