2016-10-13 4 views
1

У меня есть 2 класса, Foo и BabyFoo, который наследует Foo. В основном методе я создаю объект Foo f1 = new BabyFoo(3);. У метода BabyFoo есть метод сравнения, который переопределяет его родительский метод, который сравнивается, чтобы убедиться, что объект имеет один и тот же класс, и убедитесь, что свойство thing имеет то же значение.Java - Сравнить дочернее свойство объекта родительского класса

Моего вопроса, в методе compare в BabyFoo классе, как я получить доступ к thing свойства arguement получения прошло в, как это типа Foo, как Foo класса не имеет thing свойства, хотя он был создан как new BabyFoo(3).

public abstract class Foo 
{ 
    public boolean compare(Foo other) 
    { 
     //compare checks to make sure object is of this same class 
     if (getClass() != other.getClass()) 
      return true; 
     else 
      return false; 
    } 
} 
public class BabyFoo extends Foo 
{ 
    protected int thing; 

    public void BabyFoo(int thing) 
    { 
     this.thing = thing; 
    } 
    @Override 
    public boolean compare(Foo other) 
    { 
     //compares by calling the parent method, and as an 
     //additional step, checks if the thing property is the same. 
     boolean parent = super.compare(other); 
     //--question do-stuff here 
     //how do I access other.thing(), as it comes in 
     //as a Foo object, which doesn't have a thing property 
    } 
} 

ответ

1

Вам нужно бросить other объект быть BabyFoo, написав что-то вроде

((BabyFoo)other).thing

Это предполагает, что все остальное, как вы хотите.

0

Проверьте, имеет ли объект other тип BabyFoo. Вы можете выполнить бросок на объекте, который позволит вам получить доступ к thing переменным:

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

Поскольку метод получает Foo как переменные, а не BabyFoo, вы не можете получить это самое поле без литья ,

Однако, литье должно быть сделано безопасно, вы должны проверить, что вы сравниваете к BabyFoo и не Foo

@Override 
public boolean compare(Foo other) { 
    return other instanceof BabyFoo && 
     super.compare(other) && 
     this.thing == ((BabyFoo)other).thing; 
} 
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; 
}