В данном коде класс B
и класс C
не находятся в отношениях "есть", поэтому их нельзя привести друг к другу.
Единственное, что B
и у C
общим является то, что они оба являются подклассами Object
, поэтому они оба могут быть преобразованы в Object
.Другими словами, B
is-a Object
и C
is-a Object
:
B b = new B();
Object ob = (Object)b;
C c = new C();
Object oc = (Object)c;
В качестве контрпримера к тому, что делается, представьте себе этот случай:
class B extends Object {
public void doSomething();
}
class C extends Object {
public void doAnotherThing();
}
В этом случае, что должен делать следующий код?
C realC = new C();
realC.doSomething(); // This is OK.
B c = (B)realC;
c.doSomething(); // ???
Поскольку объект, созданный из класса C
, не имеет метода doSomething
, что будетэто делать?Можно видеть, что только то, что B
и C
имеют общего предка, не означает, что они могут быть взаимозаменяемыми друг с другом.
Следовательно, то, что делается в приведенном выше коде, не может быть выполнено.