Default virtual behavior of methods is opposite in C++ and Java:
In C++, class member methods are non-virtual by default. They can be made virtual by using virtual keyword. For example, Base::show() is non-virtual in following program and program prints “Base::show() called”.
#include<iostream> using namespace std; class Base { public : // non-virtual by default void show() { cout<< "Base::show() called" ; } }; class Derived: public Base { public : void show() { cout<< "Derived::show() called" ; } }; int main() { Derived d; Base &b = d; b.show(); getchar (); return 0; } |
Adding virtual before definition of Base::show() makes program print “Derived::show() called”
In Java, methods are virtual by default and can be made non-virtual by using final keyword. For example, in the following java program, show() is by default virtual and the program prints “Derived::show() called”
class Base { // virtual by default public void show() { System.out.println( "Base::show() called" ); } } class Derived extends Base { public void show() { System.out.println( "Derived::show() called" ); } } public class Main { public static void main(String[] args) { Base b = new Derived();; b.show(); } } |
Unlike C++ non-virtual behavior, if we add final before definition of show() in Base , then the above program fails in compilation.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
leave a comment
0 Comments