标签: polymorphism

何时使用虚拟析构函数?

我对大多数OO理论有了深刻的理解,但让我困惑的一件事是虚拟析构函数.

我认为无论什么以及链中的每个对象,析构函数总是会被调用.

你什么时候打算让它们成为虚拟的?为什么?

c++ polymorphism shared-ptr virtual-destructor

1420
推荐指数
13
解决办法
66万
查看次数

List <Dog>是List <Animal>的子类吗?为什么Java泛型不是隐式多态的?

我对Java泛型如何处理继承/多态性感到困惑.

假设以下层次结构 -

动物(父母)

- (儿童)

所以假设我有一个方法doSomething(List<Animal> animals).根据所有继承和多态的规则,我会假设a List<Dog> a List<Animal>而a List<Cat> a List<Animal>- 所以任何一个都可以传递给这个方法.不是这样.如果我想实现这种行为,我必须明确告诉该方法接受一个Animal的任何子类的列表doSomething(List<? extends Animal> animals).

我知道这是Java的行为.我的问题是为什么?为什么多态通常是隐含的,但是当涉及泛型时必须指定它?

java generics polymorphism inheritance

727
推荐指数
10
解决办法
10万
查看次数

什么是多态,它是什么,以及它是如何使用的?

我正在观看Google Tech Talks视频,他们经常提到多态性.

什么是多态,它是什么,以及它是如何使用的?

oop polymorphism computer-science

541
推荐指数
12
解决办法
48万
查看次数

多态性与重写与重载

就Java而言,当有人问:

什么是多态?

超载重载是一个可以接受的答案?

我认为还有更多的东西.

如果您有一个抽象基类定义了一个没有实现的方法,并且您在子类中定义了该方法,那还是会覆盖吗?

我认为超载肯定不是正确的答案.

java oop polymorphism overriding overloading

340
推荐指数
12
解决办法
25万
查看次数

为什么派生类中的重写函数会隐藏基类的其他重载?

考虑一下代码:

#include <stdio.h>

class Base {
public: 
    virtual void gogo(int a){
        printf(" Base :: gogo (int) \n");
    };

    virtual void gogo(int* a){
        printf(" Base :: gogo (int*) \n");
    };
};

class Derived : public Base{
public:
    virtual void gogo(int* a){
        printf(" Derived :: gogo (int*) \n");
    };
};

int main(){
    Derived obj;
    obj.gogo(7);
}
Run Code Online (Sandbox Code Playgroud)

得到此错误:

>g++ -pedantic -Os test.cpp -o test
test.cpp: In function `int main()':
test.cpp:31: error: no matching function for call to `Derived::gogo(int)'
test.cpp:21: note: candidates are: virtual …

c++ polymorphism overriding

212
推荐指数
3
解决办法
5万
查看次数

继承和多态之间的主要区别是什么?

我今天在模块开卷考试结束时遇到了这个问题,发现自己迷路了.我正在阅读Head first Java,两个定义似乎完全相同.我只是想知道主要区别在于我自己的想法.我知道有很多类似的问题,但是,我没有看到哪些提供了明确的答案.

java oop polymorphism inheritance

162
推荐指数
7
解决办法
25万
查看次数

C++中的纯虚析构造函数

写错是不对的:

class A {
public:
    virtual ~A() = 0;
};
Run Code Online (Sandbox Code Playgroud)

对于抽象基类?

至少在MSVC中编译......它会在运行时崩溃吗?

c++ polymorphism destructor pure-virtual

158
推荐指数
2
解决办法
7万
查看次数

多态性:为什么使用"List list = new ArrayList"而不是"ArrayList list = new ArrayList"?

可能重复:
为什么要优先选择Java类的接口?

我应该什么时候使用

List<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

ArrayList继承自List,所以如果某些功能ArrayList不在List,那么我将失去一些功能ArrayList,对吧?编译器在尝试访问这些方法时会注意到错误?

java polymorphism interface list

139
推荐指数
7
解决办法
9万
查看次数

跳转到Eclipse IDE中的接口实现

你知道如何在Eclipse中按下F3一个方法会带你到它的声明吗?我有一个方法是接口的一部分; 点击F3这个自然会带我到声明界面.

显然,有一个实现此接口的对象,这是实际实现该方法的地方.我想,当我按下时F3,跳转到实现,而不是接口声明.我知道在编译时可能不知道实现,所以有没有办法让Eclipse向我展示实现接口的所有类,以便我可以选择要查看的实现方法?现在当发生这种情况时,我只是手动搜索这个以找到实现的方法.

eclipse polymorphism interface

138
推荐指数
6
解决办法
11万
查看次数

在Java中,如何从派生类中的重写方法调用基类的方法?

我有两个Java类:B,它扩展了另一个类A,如下所示:

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { /* Another code */ }
}
Run Code Online (Sandbox Code Playgroud)

我想打电话A.myMethod()B.myMethod().我来自C++世界,我不知道如何在Java中做这个基本的事情.

java methods polymorphism inheritance

130
推荐指数
6
解决办法
24万
查看次数