我对大多数OO理论有了深刻的理解,但让我困惑的一件事是虚拟析构函数.
我认为无论什么以及链中的每个对象,析构函数总是会被调用.
你什么时候打算让它们成为虚拟的?为什么?
我对Java泛型如何处理继承/多态性感到困惑.
假设以下层次结构 -
动物(父母)
狗 - 猫(儿童)
所以假设我有一个方法doSomething(List<Animal> animals).根据所有继承和多态的规则,我会假设a List<Dog> 是 a List<Animal>而a List<Cat> 是 a List<Animal>- 所以任何一个都可以传递给这个方法.不是这样.如果我想实现这种行为,我必须明确告诉该方法接受一个Animal的任何子类的列表doSomething(List<? extends Animal> animals).
我知道这是Java的行为.我的问题是为什么?为什么多态通常是隐含的,但是当涉及泛型时必须指定它?
我正在观看Google Tech Talks视频,他们经常提到多态性.
什么是多态,它是什么,以及它是如何使用的?
就Java而言,当有人问:
什么是多态?
将超载或重载是一个可以接受的答案?
我认为还有更多的东西.
如果您有一个抽象基类定义了一个没有实现的方法,并且您在子类中定义了该方法,那还是会覆盖吗?
我认为超载肯定不是正确的答案.
考虑一下代码:
#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 …
我今天在模块开卷考试结束时遇到了这个问题,发现自己迷路了.我正在阅读Head first Java,两个定义似乎完全相同.我只是想知道主要区别在于我自己的想法.我知道有很多类似的问题,但是,我没有看到哪些提供了明确的答案.
写错是不对的:
class A {
public:
virtual ~A() = 0;
};
Run Code Online (Sandbox Code Playgroud)
对于抽象基类?
至少在MSVC中编译......它会在运行时崩溃吗?
可能重复:
为什么要优先选择Java类的接口?
我应该什么时候使用
List<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
ArrayList继承自List,所以如果某些功能ArrayList不在List,那么我将失去一些功能ArrayList,对吧?编译器在尝试访问这些方法时会注意到错误?
你知道如何在Eclipse中按下F3一个方法会带你到它的声明吗?我有一个方法是接口的一部分; 点击F3这个自然会带我到声明界面.
显然,有一个实现此接口的对象,这是实际实现该方法的地方.我想,当我按下时F3,跳转到实现,而不是接口声明.我知道在编译时可能不知道实现,所以有没有办法让Eclipse向我展示实现接口的所有类,以便我可以选择要查看的实现方法?现在当发生这种情况时,我只是手动搜索这个以找到实现的方法.
我有两个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中做这个基本的事情.
polymorphism ×10
java ×5
c++ ×3
inheritance ×3
oop ×3
interface ×2
overriding ×2
destructor ×1
eclipse ×1
generics ×1
list ×1
methods ×1
overloading ×1
pure-virtual ×1
shared-ptr ×1