初学者尝试多态性。我想我正在尝试用不同的语言编写相同的代码,但是结果不一样:

C++

#include <iostream>
using namespace std;

class A {
    public:

    void whereami() {
        cout << "You're in A" << endl;
    }
};

class B : public A {
    public:

    void whereami() {
        cout << "You're in B" << endl;
    }
};

int main(int argc, char** argv) {
    A a;
    B b;
    a.whereami();
    b.whereami();
    A* c = new B();
    c->whereami();
    return 0;
}

结果 :
You're in A
You're in B
You're in A

Java的:
public class B extends A{

    void whereami() {
        System.out.println("You're in B");
    }

}

//and same for A without extends
//...


public static void main(String[] args) {
    A a = new A();
    a.whereami();
    B b = new B();
    b.whereami();
    A c = new B();
    c.whereami();
}

结果 :
You're in A
You're in B
You're in B

不知道我是在做错什么,还是与语言本身有关?

最佳答案

您需要阅读有关C++的virtual关键字的信息。没有该限定符,您所拥有的就是对象中的成员函数。它们不遵循多态性规则(动态绑定(bind))。使用virtual限定符,您可以获得使用动态绑定(bind)的方法。在Java中,所有实例函数都是方法。您总是会得到多态性。

09-25 23:02