2016-05-11 1 views
0

Рассмотрим эту программу:Почему метод переопределенного экземпляра, вызываемый из подкласса, когда мы используем ссылочную переменную родительского класса для вызова?

class ABC 
{ 
    public void fun() 
    { 
     System.out.println("Function of ABC class "); 
    } 
} 
class XYZ extends ABC 
{ 
    public void fun() 
    { 
     System.out.println("Function of XYZ class "); 
    } 
} 
public class Example 
{ 
    public static void main(String []args) 
    { 
     ABC obj = new XYZ(); 
     obj.fun(); 
    } 
} 

Выход:

Function of XYZ class 

obj имеет ссылку на super class ABC и ранее я изучал, что ссылочная переменная, принадлежащая суперкласса может получить доступ только члены высшего класса не подкласс. Но когда мы переопределяем метод в классе sub class, то почему ссылочная переменная обращается к члену подкласса.

+0

Полиморфизм !!! –

ответ

1

Каждый раз, когда мы переопределяем метод, происходит позднее связывание (или динамическое связывание), а не раннее связывание, и именно поэтому мы имеем ссылку на суперкласс, хранящий объект подкласса, а при вызове метода переопределения метод в подкласс выполняется.