Сбой downcast , потому что созданный экземпляр - Fruit
, чтобы сделать его Pear
, измените код на
// Make a Pear - it looks like a fruit, tastes like a fruit,
// and quacks like a fruit. It must be a fruit.
Fruit genericFruit = new Pear();
// Downcast it to a pear.
Pear pear = (Pear)genericFruit;
Приведение вниз приводит к фактическому типу, а не к объявленному типу - но вы не знаете, что это за фактический тип (если вы не тестируете с использованием is / as). Вот почему это немного опасно, и большинство людей стараются избегать удручения, где это возможно.
РЕДАКТИРОВАТЬ: Чтобы превратить фрукт в грушу, вы можете сами создать новую Грушу и инициализировать ее как можно лучше. Можно скопировать некоторые свойства, общие для всех фруктов, от фруктов до груши. Но это также может быть похоже на попытку поставить квадратный колышек в круглое отверстие, смешивая ваши метафоры и заканчивая фруктовым пюре.