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”.

filter_none

edit
close

play_arrow

link
brightness_4
code

#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;
}

chevron_right


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”

filter_none

edit
close

play_arrow

link
brightness_4
code

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();
    }
}

chevron_right


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.

java-img




My Personal Notes arrow_drop_up
Article Tags :
Practice Tags :


7


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