我想把我制作的一个类变成一个抽象类,并获得另一个类来扩展它。这是因为类(粒子)在很大程度上依赖于我想要制作抽象(类)的类。
我不确定如何使用new关键字实例化的所有对象,或者它是否会完全混乱。我愿意尝试在我自己的例子中学习一些关于使用抽象类的东西但是如果有人能帮助我理解我在做什么那就太棒了!
答案 0 :(得分:1)
如果你的新课程依赖于vector而不是继承它,请尝试编写... 所以,假设您想创建自己的队列,那么从向量继承而不是拥有类型为vector的数据成员并不是一个好主意。 这比继承有许多优点。如果你需要将容器更改为其他设置,请不必担心更改界面。你仍然会有一些添加和删除你的类的接口。因此,客户端代码将独立于您用于生成Queue的容器。 只是在旁注:考虑使用组合而不是继承。并查看一些设计模式,并在需要合成时尝试理解,何时无法避免继承。
答案 1 :(得分:1)
据我所知,您正在尝试将class MyClass
转换为abstract class AbstractMyClass
因此,如果将MyClass转换为抽象类,则将所有语句转换为
AbstractMyClass myClass=new AbstractMyClass();
会给你一个错误,因为你不能创建一个AbstractMyClass的实例。 此外,如果情况是
abstract class AbstractMyClass
{
}
class ConcreteMyClass extends AbstractMyClass
{
}
然后可以做类似
的事情AbstractMyClass abstractMyClass=new ConcreteMyClass();
或通常的
ConcreteMyClass concreteMyClass=new ConcreteMyCLass();
答案 2 :(得分:0)
继承:是一种关系。更重要的是,基类和子类的接口应该是相同的。在这里你不希望客户端代码使用push_back()(对于C ++)添加新元素,但是像add()这样的方法。所以接口是不同的,明确指示继承的错误使用。组合:有一个并且也“实现在条件”。这是来自Scott Mayer的有效C ++。与您的情况一样,您希望在某些方面实现新的DataStrucutre。所以构图就是你所需要的。现在派生类不需要具有相同的接口。一般来说,如果你发现接口是相同的,它更像是继承,如果不是组合。复合在继承方面还有很多其他优点。只需谷歌或选择任何好的设计书。