Questions tagged «polymorphism»

在计算机科学中,多态是一种编程语言功能,它允许以统一的方式处理不同数据类型的值。


17
List <Dog>是List <Animal>的子类吗?为什么Java泛型不是隐式多态的?
我对Java泛型如何处理继承/多态感到困惑。 假设以下层次结构- 动物(父母) 狗 - 猫(儿童) 因此,假设我有一个方法doSomething(List&lt;Animal&gt; animals)。通过将所有继承和多态的规则,我会假设List&lt;Dog&gt; 是一个List&lt;Animal&gt;和List&lt;Cat&gt; 是一个List&lt;Animal&gt;-所以任何一个可以传递给此方法。不是这样 如果要实现此行为,则必须通过说出明确告诉该方法接受Animal的任何子类的列表doSomething(List&lt;? extends Animal&gt; animals)。 我了解这是Java的行为。我的问题是为什么?为什么多态性通常是隐式的,但是当涉及泛型时,必须指定它?


21
多态性vs覆盖vs重载
就Java而言,当有人问: 什么是多态性? 将超载或重载是一个可以接受的答案? 我认为还有更多。 如果您有一个抽象基类,它定义了一个没有实现的方法,并且您在子类中定义了该方法,那该方法是否仍然覆盖? 我认为 过载不是肯定的正确答案。


17
继承和多态性之间的主要区别是什么?
今天的单元开卷考试结束时,我被问到了这个问题,结果发现自己迷路了。我正在阅读Head first Java,这两个定义似乎完全相同。我只是想知道我自己的主观差异是什么。我知道有很多与此类似的问题,但是我没有看到能提供明确答案的问题。


11
跳入Eclipse IDE中的接口实现
您知道在Eclipse中如何按下F3某个方法将带您进入它的声明?好吧,我有一个方法是接口的一部分。单击F3此按钮自然会带我进入声明界面。 显然,有一个对象实现此接口,而这正是该方法实际实现的地方。我想在F3按时跳转到实现,而不是接口声明。我知道实现可能在编译时未知,因此Eclipse是否有办法向我展示实现该接口的所有类,以便我可以选择查看哪个实现的方法?现在,发生这种情况时,我只是手动搜索此内容以找到实现的方法。

5
用其他类型和消息重新引发异常,保留现有信息
我正在编写一个模块,并希望它可以引发的异常具有统一的异常层次结构(例如,从FooError抽象类继承所有foo模块的特定异常)。这使模块的用户可以捕获那些特定的异常,并在需要时进行区别处理。但是从模块引发的许多异常是由于其他一些异常而引发的;例如,由于文件上的OSError而导致某些任务失败。 我需要的是“包装”捕获到的异常,使其具有不同的类型和消息,以便通过捕获异常的方式在传播层次结构中进一步获取信息。但是我不想丢失现有的类型,消息和堆栈跟踪;这对于尝试调试问题的人来说都是有用的信息。顶级异常处理程序是不好的,因为我正在尝试在异常传播到传播堆栈之前对其进行装饰,并且顶级处理程序为时已晚。 这可以通过foo从现有类型(例如class FooPermissionError(OSError, FooError))中派生模块的特定异常类型来部分解决,但这并没有使将现有异常实例包装为新类型或修改消息变得更加容易。 Python的PEP 3134 “异常链接和嵌入式回溯”讨论了Python 3.0中接受的“链接”异常对象更改,以指示在处理现有异常期间引发了新异常。 我想做的是相关的:我需要它在早期的Python版本中也能工作,我不需要链,而只需要多态。什么是正确的方法?


7
C ++中的多态
据我所知: C ++提供了三种不同类型的多态性。 虚拟功能 函数名称重载 运算符重载 除了以上三种类型的多态性之外,还存在其他类型的多态性: 运行 编译时间 临时多态性 参数多态性 我知道,运行时多态性可以通过以下方式实现虚函数 和静态多态性可以通过以下方式实现模板功能 但是对于其他两个 临时多态性 网站说的参数多态性, 临时多态性: 如果可以使用的实际类型范围是有限的,并且必须在使用前单独指定组合,则这称为临时多态性。 参数多态性: 如果编写所有代码时都没有提及任何特定类型,因此可以与任何数量的新类型透明地使用,则称为参数多态。 我很难理解他们:( 任何人都可以通过示例解释它们吗?我希望这些问题的答案对他们所在大学的许多新学员有帮助。


12
如何调用base.base.method()?
// Cannot change source code class Base { public virtual void Say() { Console.WriteLine("Called from Base."); } } // Cannot change source code class Derived : Base { public override void Say() { Console.WriteLine("Called from Derived."); base.Say(); } } class SpecialDerived : Derived { public override void Say() { Console.WriteLine("Called …
126 c#  polymorphism 

5
C ++中的私有虚拟方法
在C ++中将私有方法虚拟化的好处是什么? 我在一个开源C ++项目中注意到了这一点: class HTMLDocument : public Document, public CachedResourceClient { private: virtual bool childAllowed(Node*); virtual PassRefPtr&lt;Element&gt; createElement(const AtomicString&amp; tagName, ExceptionCode&amp;); };


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.