我有2个类,Foo和BabyFoo继承了Foo。在Main方法中,我创建了一个对象Foo f1 = new BabyFoo(3);
。 BabyFoo有一个比较方法,它覆盖其父方法,比较以确保一个对象属于同一个类,并确保thing
属性也是相同的值。
我的问题是,在compare
类的BabyFoo
方法中,如何访问传入的争论的thing
属性,因为它的类型为{{1}因为Foo
类没有Foo
属性,即使它是作为thing
创建的。
new BabyFoo(3)
答案 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;
}