Here are same code for java,c#,c++ which demonstrate constructor call, inheritance and polymorphism
Java
class A{
A() {
print();
}
void print() { System.out.println("A"); }
}
public class TestJava extends A {
int i = 4;
public TestJava() {
super();
}
void print() {
System.out.println(i);
}
public static void main(String[] args) {
A a = new TestJava();
a.print();
}
}
Output: 0 4
C#
namespace CSharpTest
{
using System.IO;
using System;
class A
{
public A()
{
print();
}
public virtual void print()
{
Console.WriteLine("A");
}
}
class Program : A
{
int i = 4;
public override void print()
{
Console.WriteLine(i);
}
static void Main(string[] args)
{
A a = new Program();
a.print();
}
}
}
Output: 4 4
C++
class A{
public:
A() {
print();
}
virtual void print() {
fprintf(stderr, "A\n");
}
virtual ~A(){}
};
class B : public A {
public:
int i = 4;
virtual void print() {
fprintf(stderr, "%d\n", i);
}
};
int main(int argc, char** argv) {
A *a = new B;
a->print();
//.....
return 0;
}
Output A 4
As you see C++ and java/c# differs. Plus java and c# differs on initializing variable i.
C++ will call constructor of A and inside A's constructor it will call A's print
java /c# will call constructor A but inside A's constructor it will call B's print
c# will initalize i before calling A's constructor
Which one should be considered as the righteous implementation for OOP.
Aucun commentaire:
Enregistrer un commentaire