How does default virtual behavior differ in C++ and Java ?

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.






Practice Tags :
Article Tags :
Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



2.3 Average Difficulty : 2.3/5.0
Based on 27 vote(s)