Когда мы переопределяем метод, разве мы не переопределяем весь метод? Я попытался переопределить java.ОУ.Контейнер.красить


У меня есть вопрос о переопределении. Я думал, что переопределение метода - это переписывание этого метода. Но, пока я изучал, как это сделать, у меня появились сомнения. Предположим, что я написал следующий код:

import java.applet.Applet;

import java.awt.Graphics;

public class guitryings_2 extends Applet{

    public void paint( Graphics g )
    {
        g.drawString("Hi", 25, 75);
        showStatus("Deneme");
    }

}

Если метод paint включает только g. drawString ("Hi", 25, 75); и showStatus не существует, я получаю сообщение "апплет запущен".

Если override означает переписывание всего метода, когда я пишу только g. drawStrings без, это означает, что я не определил ни одной строки, которая будет показано ниже. Так не должен ли текст "апплет запущен" исчезнуть?

1 2

1 ответ:

Фактически, вы переопределяете java.awt.Container.paint(Graphics g), поскольку ни Applet, ни какой-либо класс в иерархии до Container не обеспечивают своей собственной реализации paint().

Это метод, который вы переопределяете (и, да, методы всегда переопределяются в целом - вы не можете переопределить только часть метода. Единственное, что вы можете сделать, это вызвать переопределенный метод, например super.paint(g)).

Однако, java.awt.Container.paint() не содержит какого-либо конкретного кода апплета, следовательно, сообщение, которое вы видите (Applet started), очевидно печатается контейнером апплета - например, браузером (который все еще имеет основной контроль над своей строкой состояния) или средством просмотра апплетов.

В качестве дополнительного замечания обратите внимание, что апплеты устарели, а некоторые браузеры уже списали необходимые собственные API для поддержки апплетов вообще.