Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему нельзя: class Person: Object, Human?

Август Сентябрь Знаток (331), закрыт 1 месяц назад
Насколько мне известно:
структуры не могут наследоваться ни от чего, т.к. они унаследованы от класса Value.Type, а тот в свою очередь от Object. В C# нельзя делать множественное наследование, кроме интерфейсов, поэтому раз структуры уже унаследованы от Value.Type, то ни от чего другого они уже не могут наследоваться.
классы тоже наследуются, но уже напрямую от Object. Но почему они могут наследоваться от других классов?
По сути же:
 class Person 
это то же самое, что и
 class Person: Object 
Object наследуется неявно.
Тогда почему можно:
 class Person: Human 
Но нельзя:
 class Person: Object, Human 
Лучший ответ
Def Гений (63648) 1 месяц назад
Чтобы не порождать проблем ромбовидного наследования и не героически превозмогать их впоследствии виртуальным наследованием и прочими методами, т.е. чтобы максимально упростить это самое наследование.
Август СентябрьЗнаток (331) 1 месяц назад
Меня волнует не "почему классы не поддерживают множественное наследование", а наоборот, почему классы уже наследуясь от Object, могут наследоваться от другого класса.
Def Гений (63648) Август Сентябрь, >классы уже наследуясь от Object, могут наследоваться от другого класса. Классы, у которых есть предок, отличный от Object, не наследуются от Object. Они имеют Object в списке иерархии наследования. Единственный Object, в отличие, скажем, от c++, где при наследовании класса Person от Object и Human, при условии наследования Human от Object создавалось бы две структуры, соответствующие Object (без виртуального наследования)
DefГений (63648) 1 месяц назад
>Но нельзя:

class Person: Object, Human

[где вместо Object нельзя было бы указывать произвольный класс в условиях допустимости только транзитивного наследования]

Такая запись 1) создавала бы путаницу, представляя дело так, что в языке якобы имеется множественное наследование, в условиях его отсутствия, 2) не предоставляла бы никаких преимуществ программисту, 3) не отображала бы реальную иерархию наследования.
Остальные ответы
Jurijus Zaksas Искусственный Интеллект (445658) 1 месяц назад
Потому что это не имеет смысла. Класс наследуется от ВСЕХ своих предков, а не только от родительского класса. Перечислять этих предков при каждом наследовании совершенно незачем. А вот если бы стандарт языка писали бедуины - надо было бы перечислять, до самого Пророка...
Август СентябрьЗнаток (331) 1 месяц назад
Ладно, допустим, запись такая только путает, т.к. похоже на множественное наследование и не имеет смысла, потому компилятор ругается.
Но почему классы напрямую уже наследуясь от Object, могут наследоваться от другого класса?
Ведь по логике со структурами: структуры наследуются от ValueType, потому больше от других классов не могут (не считая предка самого ValueType).
Похожие вопросы