Employee.java
public class Employee
{
private String name;
private String address;
private int number;
public Employee(String name, String address, int number)
{
System.out.println("Constructing an Employee");
this.name = name;
this.address = address;
this.number = number;
}
public void mailCheck()
{
System.out.println("Mailing a check to " + this.name
+ " " + this.address);
}
}
VirtualMethod.java
class Salary extends Employee
{
private double salary; //Annual salary
public Salary(String name, String address, int number, double
salary)
{
super(name, address, number);
this.salary=salary;
}
public void mailCheck()
{
System.out.println("Within mailCheck of Salary class ");
System.out.println("Mailing check to "
+ " with salary " + salary);
}
}
public class VirtualMethod
{
public static void main(String [] args)
{
Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
System.out.println("Call mailCheck using Salary reference --");
s.mailCheck();
System.out.println("\n Call mailCheck using Employee reference--");
e.mailCheck();
}
}
salida
Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class
Mailing check to with salary 3600.0
Call mailCheck using Employee reference--
Within mailCheck of Salary class
Mailing check to with salary 2400.0
Explicación
aquí, tenemos una instancia dos Salary
objetos. Uno que usa una referencia Salary
s
, y el otro que usa una referencia Employee
e
.
Invocando s.mailCheck()
el compilador ve mailCheck()
en la clase Salary
en tiempo de compilación, y la JVM invoca mailCheck()
en la clase Salary
en tiempo de ejecución.
Invocar mailCheck()
en e
es bastante diferente porque e
es una referencia Employee
. Cuando el compilador ve e.mailCheck()
, el compilador ve el método mailCheck()
en la clase Employee
.
Aquí, en tiempo de compilación, el compilador usó mailCheck()
en Employee
para validar esta afirmación. Sin embargo, en tiempo de ejecución, la JVM invoca mailCheck()
en la clase Salary
.
[Método virtual] (http://en.wikipedia.org/wiki/Virtual_method) –
también http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming – stryba
Gracias por la referencia. – Popokoko