О кастинге и предметах - PullRequest
1 голос
/ 21 декабря 2010

это просто, я просто хочу объяснить это:

internal class B { // Base class
}
internal class D : B { // Derived class
}

в другом классе я написал:

B b3 = new Object(); //compilation time error!

почему ??? Мы предполагаем, что все классы наследуются от «объекта»

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010

B более специализирован, чем Object, поэтому вы не можете назначить экземпляр Object для ссылки B. Это потому, что не каждый Object на самом деле является B - верно только обратное.

Предположим, у вас есть поле x в классе B. Когда вы создаете экземпляр Object, для этого поля не зарезервирована память, и если вы можете назначить его для ссылки типа B, он попытается выполнить чтение или запись в нераспределенную память, что недопустимо (или полезно). ).

2 голосов
/ 21 декабря 2010

Все классы object с, но не все объекты {someclass}.

Аналогичным образом все автобусы являются транспортными средствами, но не все транспортные средства являются автобусами.

...