Calling an Overridden Method from a Parent-Class Constructor
Posted
by Vaibhav Bajpai
on Stack Overflow
See other posts from Stack Overflow
or by Vaibhav Bajpai
Published on 2010-05-24T16:16:12Z
Indexed on
2010/05/24
16:21 UTC
Read the original article
Hit count: 172
I tried calling an overridden method from a constructor of a parent class and noticed different behavior across languages.
C++
- echoes A.foo()
class A{
public:
A(){foo();}
virtual void foo(){cout<<"A.foo()";}
};
class B : public A{
public:
B(){}
void foo(){cout<<"B.foo()";}
};
int main(){
B *b = new B();
}
Java
- echoes B.foo()
class A{
public A(){foo();}
public void foo(){System.out.println("A.foo()");}
}
class B extends A{
public void foo(){System.out.println("B.foo()");}
}
class Demo{
public static void main(String args[]){
B b = new B();
}
}
C#
- echoes B.foo()
class A{
public A(){foo();}
public virtual void foo(){Console.WriteLine("A.foo()");}
}
class B : A{
public override void foo(){Console.WriteLine("B.foo()");}
}
class MainClass
{
public static void Main (string[] args)
{
B b = new B();
}
}
I realize that in C++ objects are created from top-most parent going down the hierarchy, so when the constructor calls the overridden method, B does not even exist, so it calls the A' version of the method. However, I am not sure why I am getting different behavior in Java and C#.
© Stack Overflow or respective owner