Trying out polymorphism as a beginner. I think I am trying the same code in different languages, but the result is not the same :
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;
}
Results :
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();
}
Results :
You're in A
You're in B
You're in B
Not sure if i'm doing something wrong, or this has to do with the languages themselves?
You need to read up about the virtual
keyword for C++. Without that qualifier, what you have are member functions in your objects. They don't follow the rules of polymorphism (dynamic binding). With the virtual
qualifier you get methods, which use dynamic binding. In Java, all instance functions are methods. You always get polymorphism.
Use "virtual functions".
#include <iostream>
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;
}
In Java, all instance methods are virtual functions in default.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With