Since ClassY extends ClassX, you can remove private ClassY bfrom class B. Then you can simply set your instance of classX to an instance variable a. This allows you to foo()inherit in class B, but still use the same logic and instance variable.
public class A {
protected ClassX a
public void foo() {
}
}
public class B extends A {
public void setClassY(ClassY b){
this.a = b;
}
}