我正在通过测试并遇到一个问题,我们没有与同事达成协议.
С++
1 class Base {};
2 class Derived : public Base {};
3 class Foo
4 {
5 public:
6 Foo()
7 {
-8- Base* b = new Derived(); // Concept name is?
9 }
10 };
Run Code Online (Sandbox Code Playgroud)
C#
1 abstract class Base{}
2 public class Derived : Base{}
3
4 public class Foo
5 {
6 public Foo
7 {
-8- Base b = new Derived(); // Concept name is?
9 }
10 }
Run Code Online (Sandbox Code Playgroud)
问题是:上面的第8行是以下概念的一个例子
请提供知识来源答案的链接.
PS测试是breinbench上的'OO Concept'.这是免费的.
更新:
从保护多态性的答案之一
"简单来说,多态性是一种类型A能够像其他类型一样出现和使用的能力,B.在强类型语言中,这通常意味着类型A以某种方式从类型B派生,或者类型A实现接口代表B型."
来自维护遗产的维基百科
继承有时也称为泛化,因为is-a 关系表示对象类之间的层次结构.
和
因此,继承具有另一种视图,即一种称为多态的双重视图,它描述了由共享控制代码控制的许多代码片段.
所以Base = new Derived()显示'是'(继承).其结果是多态性.
所以我怀疑什么是对的?
Bri*_*eil 30
这个问题很容易......这是多态性.
由于继承,完成了多态行为.您可以将Derived实例视为Base,因为Derived继承自Base.当应用于OO语言中的类型时,这是多态性的定义......
http://en.wikipedia.org/wiki/Polymorphism_(computer_science)
[更新,更新]
我希望这是明确的......这些都是说同样的事情的不同方式.
"通过继承,一个类可以用作多种类型;它可以用作自己的类型,任何基类型,或任何接口类型,如果它实现接口.这称为多态."
[更新]
鉴于评论,我将尝试更具体......我不是说因为Derived继承自Base,该行是多态行为的一个例子,我说的是将一个实例赋值给一个类型的变量派生自多变性行为的一个例子.引用我附上的链接的第一句话......
"在计算机科学中,多态性是一种编程语言特性,它允许使用统一的接口处理不同数据类型的值"
这意味着我可以将Derived的实例视为Base的一个实例,它表现出多态行为.这并不依赖于类上虚拟方法的存在.
另一个来自不同来源的引用......
"简单来说,多态性是一种类型A能够像其他类型一样出现和使用的能力,B.在强类型语言中,这通常意味着类型A以某种方式从类型B派生,或者类型A实现接口代表B型."
这个片段是关于继承的
抽象是关于在对象方面建模现实世界概念而不是考虑函数调用或其他东西的整个想法.它基本上将对象视为单独的实体.
封装是将对象的实现隐藏在明确定义的接口背后的外部世界中的行为.
继承是派生类和基类之间的关系以及概念的分类.它定义了太多实体之间的"is-a"关系,增加了在期望基数的情况下使用派生类的能力.
多态性意味着两个对象在界面上相似但行为方式不同(想想virtual方法).
聚合定义了两个概念之间的"has-a"关系.表示对象由另一个实体组成.
我认为答案的多样性表明这是一个构造不良的问题.
如果你把枪放在我的头上,我可能会选择继承,因为这个模型,因为Derived继承Base,然后Derived可以在需要Base的地方使用(例如被Base*指向),但我可以想象一个保护任何答案.
如果我正在做出招聘决定,我会更倾向于听听候选人如何为自己选择的答案辩护,而不是选择哪一个.但是,使用这样的测试的公司可能不是,或者没有任何人能够评估该级别的技能.
我已经说过多态性,因为这些类型可以相互分配,并且可以被视为它们是相同的.您正在使用父接口来处理子类型的实例.
继承更多地是从父到子(也就是从基础到派生,从超级到子,从抽象到具体)继承成员和/或成员实现.
我将虚拟函数的解析看作具体实现作为多态的一个特征,因此不会因示例中缺少虚函数解析而推迟.