Почему частный метод вызывается из ссылочного типа, а общедоступный метод вызывается из типа объекта в Java? [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему частный метод вызывается из ссылочного типа, а общедоступный метод вызывается из типа объекта в Java? [дубликат]

Сообщение Anonymous »

Я понимаю, что частные методы не могут быть переопределены в Java, но меня смущает поведение разрешения метода. Вот мой код:

Код: Выделить всё

class Main {
public static void main(String[] args) {
Main m = new Sub();
m.sing();
System.out.println(m.foo()+"");
}

public void sing(){
System.out.println("hohoho");
}

private boolean foo(){
return false;
}

}

class Sub extends Main{

public boolean foo(){
return true;
}

public void sing(){
System.out.println("lalala");
}
}
Согласно моему предположению, поскольку тип объекта m — Sub, а ссылочный тип — Main, именно тип объекта (Sub) решает, какой метод вызывать во время выполнения и в этом В этом случае я предполагал, что оба вызова функции будут вызваны из подкласса.
Но результат:

Код: Выделить всё

lalala

false
Обратите внимание, что когда я вызываю метод Sing, вызывается метод подкласса, а когда я вызываю метод foo, вызывается метод основного класса.
При вызове Sing() имеет смысл запускать реализацию Sub, поскольку она неявно переопределяет функцию Single() Main. Я также понимаю, что методы foo() в обоих классах являются автономными, и Sub не наследует и не переопределяет foo().
Мой вопрос здесь: при вызове метода foo, что мешает запуску Java Подкласс foo() ? (это основано на моем предположении, что именно тип объекта определяет метод запуска, а не ссылочный тип, но наблюдения показывают обратное)
Мое предположение в корне неверно?

Подробнее здесь: https://stackoverflow.com/questions/792 ... method-get
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»