Why do we need to explicitly define a method as virtual and then also specify override in C# to accomplish method overriding whereas the same thing is achieved without using both of these in keywords in Java. What purpose does it serve?
            Asked
            
        
        
            Active
            
        
            Viewed 5,583 times
        
    4
            
            
        - 
                    possible duplicate of [Why C# implements methods as non-virtual by default?](http://stackoverflow.com/questions/814934/why-c-implements-methods-as-non-virtual-by-default) – Adam Robinson Mar 18 '11 at 03:09
 
3 Answers
6
            in java, there's no need to add any keyword to override a method. But some rules apply:
- Methods overriding cannot be declared more private than the super class method.
 - Any exceptions declared in overriding method must be of the same type as those thrown by the super class, or a subclass of that type.
 - Methods declared as final cannot be overridden.
 - An overriding method can be declared as final as the keyword final only suggests that this method cannot be further overridden.
 - Methods declared as private cannot be overridden as they are not visible outside the class.
 
        bluefoot
        
- 10,220
 - 11
 - 43
 - 56
 
3
            
            
        This way you have tighter control over what's overrideable or not. It's the same as in access permissions - do you give a user all rights by default and remove permissions, or do you give none and then add what's required.
        Andrey
        
- 20,487
 - 26
 - 108
 - 176
 
0
            
            
        Function Overriding Means "Different Methods with the Same Name with the same arguments". Here i attach a small code about overriding.
Here i am using "Virtual" Keyword for Base class. If we want to invoke derived class then we have to use "Override" Keyword.
To Invoke Base Class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Function_Overriding
{
    public class Program
    {
        public virtual void display()
        {
            Console.WriteLine("This is Function Overriding");
        }
        public virtual void rnreddy()
        {
            Console.WriteLine("This is Possible because of RN Reddy");
        }
        static void Main(string[] args)
        {
            Program dc = new Program();
            dc.display();
            dc.rnreddy();
            Console.ReadLine();
        }
    }
}
To Invoke Derived Class
class TestOverride
{
    public class Employee
    {
        public string name;
        // Basepay is defined as protected, so that it may be accessed only by this class and derrived classes.
        protected decimal basepay;
        // Constructor to set the name and basepay values.
        public Employee(string name, decimal basepay)
        {
            this.name = name;
            this.basepay = basepay;
        }
        // Declared virtual so it can be overridden.
        public virtual decimal CalculatePay()
        {
            return basepay;
        }
    }
    // Derive a new class from Employee.
    public class SalesEmployee : Employee
    {
        // New field that will affect the base pay.
        private decimal salesbonus;
        // The constructor calls the base-class version, and initializes the salesbonus field.
        public SalesEmployee(string name, decimal basepay, decimal salesbonus) : base(name, basepay)
        {
            this.salesbonus = salesbonus;
        }
        // Override the CalculatePay method to take bonus into account.
        public override decimal CalculatePay()
        {
            return basepay + salesbonus;
        }
    }
    static void Main()
    {
        // Create some new employees.
        SalesEmployee employee1 = new SalesEmployee("Alice", 1000, 500);
        Employee employee2 = new Employee("Bob", 1200);
        Console.WriteLine("Employee4 " + employee1.name + " earned: " + employee1.CalculatePay());
        Console.WriteLine("Employee4 " + employee2.name + " earned: " + employee2.CalculatePay());
    }
}
/*
    Output:
    Employee4 Alice earned: 1500
    Employee4 Bob earned: 1200
*/
        Patrick D'Souza
        
- 3,491
 - 2
 - 22
 - 39
 
        Arjun
        
- 1