2014-11-19 1 views
0

Учитывая класс A, который имеет два метода экземпляра x() и y(), где x() звонки y() и класс B, который расширяет A и переопределяет это y() метод,Будет ли вызов метода базового класса перенаправлен на переопределенные методы производного класса?

Что такое поведение вызова к x() на экземпляре тип B?

Он вызывает y(), определенный в A, или переопределенный y() в B?

+2

Вы пробовали это? Что вы наблюдали? – Jabir

+0

Он вызовет переопределенный метод 'y()' с экземпляром B –

ответ

2

В случае сомнений относительно того, что происходит это довольно легко проверить:

static class A { 
    public void x() { 
     System.out.println("A.x"); 
     y(); 
    } 
    public void y() { 
     System.out.println("A.y"); 
    } 
} 

static class B extends A{ 
    public void y() { 
     System.out.println("B.y"); 
    } 
} 


public static void main(String[] args) { 
    A b = new B(); 
    b.x(); 
} 

Выход является

Ax По

Таким образом, вы можете видеть, что делает называть переопределенный метод.

0

Будет вызван метод класса детей. Это означает, что будет вызываться метод y() из B.

Причины вы сделали

A a = new B(); 
    a.x(); 

Таким образом, ее указывающий на объект B во время выполнения.

Если вы

B b = new B(); 
b.x(); 

будет ошибки компиляции, как б не содержит метод х, поэтому компилятор не может решить.

Смежные вопросы