2013-05-11 2 views
0
public class Superclass{ 

    void method1(){ 
     method0(); 
    } 

    void method0(){ 
     System.out.println("superclass"); 
    } 

} 



public class Subclass extends Superclass{ 

    void method0(){ 
     System.out.println("subclass"); 
    } 

} 


public class Runclass{ 

    public static void main(String[] args){ 
     new Subclass().method1(); 
    } 

} 

Этот код распечатывается - подкласс.Что определяет вызов метода переопределения

Пусть говорят, что это

new Superclass().method1(); 

тогда, он будет печатать - суперкласс

Это метод называется зависит от экземпляра, вызовите метод?

+1

'method1()' не является переопределенным методом вообще в вашем коде !!! – NINCOMPOOP

+0

@NoobUnChained Spotted !!! :) –

ответ

1

Это зависит от того, какой метод объекта вызывается. Если метод вызывается в родительском объекте, будет вызван метод parent, но если метод вызывается в дочернем объекте, тогда будет вызван метод дочернего класса. Если метод не переопределяется, всегда будет вызываться метод родительского класса.

0

Полиморфизм.

Может быть, вы забыли это

public class Subclass extends ParentClass{ 

Недо, если вы не ovveride метод в дочернем классе, она вызывает только parent method.

new Superclass().method1(); 

здесь я супер экземпляр класса есть так супер класс method1 звонки

И если вы звоните

new Subclass().method1(); 

subclasses ovveridden method1 звонки.

И я хотел бы предложить это tutorial для четкого изображения.

0

Sub Класс должен простираться Супер Класс:

public class Subclass extends SuperClass{ 

    void method0(){ 
     System.out.println("subclass"); 
    } 

} 

При вызове SubClass().method() приоритет вызова будет метод подкласса, выход

подкласс

Но в этом случае:

public class Subclass extends SuperClass{ 

    } 

Выход будет:

суперкласс

1

Пытаясь объяснить это в лучшую сторону, когда функция, скажем, ваш method() переопределяется в subclass и вы звоните method() с экземпляром superclass, объект superclass не имеет понятия о том, что method() будет переопределен, и он будет запускать свою собственную версию method().Фактически любые изменения, внесенные в subclass, невидимы для superclass. Если любой экземпляр superclass не сможет получить доступ к subclass с переопределенным method().

2

Его пример Dynamic Method Dispatch (Полиморфизм времени выполнения).
В динамическом методе диспетчерский вызов переопределенного метода разрешается во время выполнения.
Когда у позвонить

new Superclass().method1(); 

выход - superclass
Поскольку суперкласс не имеет никакой информации о подклассе.
& при вызове

new Subclass().method1(); 

выход - subclass
Потому что, когда переопределяется метод вызывается, Java определяет, какую версию метода следует выполнить на основе типа объекта именуются в момент вызова имеет место.

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