class A
{
}
class B : A
{
}
Я знаю, что B b = new A();
невозможно, но за чем объясняется это?Почему не может производный класс ссылаться на базовый класс?
class A
{
}
class B : A
{
}
Я знаю, что B b = new A();
невозможно, но за чем объясняется это?Почему не может производный класс ссылаться на базовый класс?
При выводе из A
, необходимо указать, что экземпляры B
не только B
, они A
также. Это называется inheritance в ООП. Сила наследования заключается в том, чтобы абстрагировать общие свойства/поведение с общим классом, а затем выводить из него специализированные классы. Специализированные классы могут изменять существующую функциональность (называемую переопределением) или добавлять новые функции.
Однако наследование работает только в одном направлении, а не в обоих. Объекты класса A
не могут рассматриваться как B
, так как B может (и часто это делает!) Содержит больше функциональных возможностей, чем A
. Или, другими словами, B
более конкретный, а A
- более общий.
Таким образом, вы можете сделать A a = new B();
но не B b = new A();
это просто из-за способа наследования; Женщина или Человек - это Человек и в конечном итоге добавляет что-то другое, как пол, к Человеку базового класса.
, если вы объявите:
Man m = new Person()
, чем вы получили Человек без Пол.
другой способ работает, потому что каждый человек является также лицо ;-)
Поскольку B < A, так что не могу создать новый A, равный B
А является базой, вы получены B от A. A как основа для сборки, основанная на базе, вы можете строить новые этажи. Но используя базовую конструкцию пола.
+1 приятное и простое объяснение –