在我的java类中,我记得创建了一个保存动物类对象的barn类,我的chicken和cow类(它们是动物类的子类)可以像它们的父母一样放入barn中。
我想知道如果c++也允许这个?
是的。一般的概念被称为利斯科夫替代原理。
在c++中出现但在Java中没有的一个问题是切片:什么是对象切片?
在您的java示例中,您可能持有对Animal
类的引用。在这种情况下,您可以在该引用中使用Animal
类的任何后代类。
对于c++也是一样,如果你使用指向实例的指针。如:
class Barn
{
public:
Animal* animal;
};
class Animal
{
public:
};
class Chicken : public Animal
{
public:
};
Barn::animal
甚至可以引用Chicken
类。