Экземпляр и статический поток управления с наследованием и переопределением/скрытием методаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Экземпляр и статический поток управления с наследованием и переопределением/скрытием метода

Сообщение Anonymous »

Я экспериментирую с потоком управления экземпляром и статическим потоком управления, обратите внимание на код ниже

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

class A {
{
m1();
}
A(){
System.out.println("A constructor");
}
void m1(){
System.out.println("A m1");
}
}
public class Main extends A {
public static void main(String[] args) throws Exception {
Main m = new Main();
}
void m1(){
System.out.println("Main m1");
}
}

Вывод кода:

Main m1

Конструктор

Я знаю, это потому, что:

Во-первых, статические блоки и переменные были идентифицированы сверху вниз, от родителя к дочернему элементу, в данном случае был просто main() это было статическим.
Во-вторых, выполняются статические блоки и назначения переменных, поэтому начинается выполнение main() и предпринимается попытка создать новый объект Main().

Итак, в-третьих, блоки экземпляров и переменные родительского класса будут идентифицировано. Тогда они будут выполняться сверху-снизу. (После этого запустится конструктор родительского класса, затем будут идентифицированы блоки экземпляров и переменные дочернего класса, после чего они будут выполнены сверху вниз и, наконец, выполнится конструктор дочернего класса).

Итак, блок экземпляра внутри A вызывает `m1()`. Затем выполняется конструктор A. Наконец, поток управления возвращается в `main()`, и программа завершается.

Теперь вызов `m1()` из A вызывает `m1()` из `Main` . Однако, если бы я сделал оба метода `m1()` статическими, а все остальное осталось бы прежним, вызов `m1()` из блока экземпляра A затем вызвал бы `m1()` A.

У меня два вопроса (Почему? Чисто из академических соображений я все еще изучаю Java):

  • Когда оба метода m1() нестатический, можно ли вызвать m1() A из блока экземпляра A? Я пытался выполнить this.m1(), но это все равно вызывало функцию m1() Main. (Почему?)
  • Когда оба m1( ) методы являются статическими, можно ли вызвать Main m1() из блока экземпляра A? (Думаю, нет, но я не уверен).

    Я знаю, что в первом случае происходит переопределение, а во втором случае — сокрытие метода. . Но я до сих пор не знаю, как отвечать на свои вопросы, основываясь на этих знаниях.


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Переключение между отображением и скрытием пароля на Blazor
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между абстракцией данных и скрытием кода в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между абстракцией данных и скрытием кода в Java? [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Есть ли в Python статический конструктор или статический инициализатор?
    Anonymous » » в форуме Python
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Проблема с переопределением стилей Magento 2.4.6
    Гость » » в форуме CSS
    0 Ответы
    20 Просмотры
    Последнее сообщение Гость

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