当前位置:  开发笔记 > 编程语言 > 正文

多态性?C++与Java

如何解决《多态性?C++与Java》经验,为你挑选了2个好方法。

尝试将多态性作为初学者.我想我正在尝试使用不同语言的相同代码,但结果并不相同:

C++

#include 
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

不确定我做错了什么,或者这与语言本身有什么关系?



1> 小智..:

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


使用虚拟限定符,它们仍然是成员函数.C++不使用术语"方法".有虚拟成员函数和非虚成员函数.不过术语,答案是正确的.

2> MikeCAT..:

使用“虚拟功能”。

#include 
using namespace std;

class A {
    public:

    virtual void whereami() { // add keyword virtual here
        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;
}

在Java中,默认情况下,所有实例方法都是虚函数。

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有