Что происходит в этом фрагменте кода с классом Applet? - PullRequest
1 голос
/ 17 июня 2019

Может кто-нибудь помочь мне понять, что происходит в этом коде?

public class aClass extends Applet{
    public void paint(Graphics g){
        g.drawRect(0, 0, 400, 200);
    }
}

Насколько я понимаю, я создаю класс имени aClass , которые наследуют (потому что он становится дочерним ) методами и атрибутов апплета класс ;затем перезаписывает paint метод (который был унаследован от Applet), и этот метод ожидает объект как параметр (который мы назовем именем g ), созданный из класса Графика , а затем мы вызываем drawRect метод , который соответствует g объект (который был создан из Графика класс );так что когда aClase class выполняется, прямоугольник рисуется , это так?

1 Ответ

2 голосов
/ 17 июня 2019

Апплеты - это устаревшая устаревшая технология, и вы должны рассмотреть новые технологии, такие как Java Web Start .Тем не менее, ваше понимание в основном правильно, за исключением некоторых терминов.

Я создаю класс имени aClass, который наследует (потому что он становится дочерним) методы и атрибуты класса Applet;

Расширение класса означает, что вы создаете новый подкласс (в данном случае aClass), который основан на публичном контракте и частной реализации суперкласса (Applet).То, как ведет себя aClass, должно соответствовать принципу подстановки Лискова *1013* на высоком уровне, означающем, что везде, где вы можете использовать Applet, вы также должны иметь возможность использовать aClass.Это означает соблюдение государственного контракта Applet в aClass.

класса Applet;затем переписывает метод рисования (который был унаследован от Applet),

Частично правильно.aClass будет переопределять paint, означая, что он будет вызываться при вызове paint в экземпляре aClass, а не в определении по умолчанию в Applet.Он не перезаписывает 1032 *, так как все еще можно вызвать реализацию этого метода super.Вы также должны аннотировать переопределенный метод с помощью @Override аннотации

@Override
public void paint(Graphics g){
    // calls paint from higher up the inheritance tree
    super.paint(g); 
    g.drawRect(0, 0, 400, 200);
}

, этот метод ожидает объект в качестве параметра (который мы назовем именем g), созданный из класса Graphics,

Да, или как aClass extends Applet, это может быть некоторый класс, который также расширяет Graphics.

, например, class FooGraphics extends Graphics { ... }

, а затеммы вызываем метод drawRect, соответствующий данному объекту (который был создан из класса Graphics);

Yup.Часть публичного контракта к классу Graphics.

, чтобы при выполнении класса aClase рисовался прямоугольник, это так?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...