Java - 比较父类对象的子属性

时间:2016-10-13 20:46:03

标签: java inheritance override

我有2个类,Foo和BabyFoo继承了Foo。在Main方法中,我创建了一个对象Foo f1 = new BabyFoo(3);。 BabyFoo有一个比较方法,它覆盖其父方法,比较以确保一个对象属于同一个类,并确保thing属性也是相同的值。

我的问题是,在compare类的BabyFoo方法中,如何访问传入的争论的thing属性,因为它的类型为{{1}因为Foo类没有Foo属性,即使它是作为thing创建的。

new BabyFoo(3)

4 个答案:

答案 0 :(得分:1)

您需要通过编写类似

的内容将other对象转换为BabyFoo

((BabyFoo)other).thing

这假设其他一切都是你想要的。

答案 1 :(得分:0)

检查other对象是否为BabyFoo类型。然后,您可以对该对象执行强制转换,这样您就可以访问thing变量:

if (other instanceof BabyFoo)
    BabyFoo bFoo = (BabyFoo) other;

答案 2 :(得分:0)

由于该方法将Foo作为变量而不是BabyFoo,因此您无法在不进行投射的情况下进入该事物字段。

但是,应该安全地进行投射,您需要验证是否与BabyFoo进行比较,而不是Foo

@Override
public boolean compare(Foo other) {
    return other instanceof BabyFoo &&
       super.compare(other) && 
       this.thing == ((BabyFoo)other).thing;
}

答案 3 :(得分:0)

您需要将Foo课程转发至BabyFoo课程。

@Override
public boolean compare(Foo other) {
   if (other instanceof BabyFoo) { // check whether you got the BabyFoo type class
       BabyFoo another = (BabyFoo) other;
       return super.compare(another) && another.thing == this.thing;
   }
   return false;
}