Мне было интересно, как работает java.awt.Graphics
, и я пошел в исходный код через NetBeans.
Я заметил, что Graphics - это класс abstract
, и все функции, которые я использую, - это abstract
функции
Это сделало меня делом, как я могу использовать Graphics?
Я имею в виду, что Graphics является классом abstract
, и я использую объект Graphics внутри JPanel.
Как это работает? как я могу использовать его в качестве абстрактного класса без использования класса, реализующего Graphics?
Как я могу использовать Graphics - абстрактный класс
ответ
Вы не можете использовать экземпляр абстрактного класса напрямую. Абстрактные классы, такие как Graphics, не могут быть созданы; только конкретные подклассы (Графика имеет два, DebugGraphics и Graphics2D). В случае JPanel аргумент Graphics, который вы получаете в paintComponent(), на самом деле является экземпляром Graphics2D (вы можете проверить это, выполнив его). Класс Graphics2D обеспечивает реализацию абстрактных методов в Graphics.
. Так почему же не рисовали вместо «Graphics2D»? почему он получает «Графика»? – Amirag
Вы должны использовать одну из своих реализаций, абстрактный класс не может быть инстанцирован.
Вы _are_ используете класс, который наследует его. Вы просто не знаете, какой из них. – SLaks
Начните с просмотра [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/java/painting-140037.html) для получения более подробной информации о процессе рисования. «Графика» является абстрактной, поскольку она зависит от физической цели, которую она использует для рисования, для рисования на изображении, экране или принтере все требует разных реализаций. – MadProgrammer
В случае экрана и принтера система создает экземпляр контекста «Graphics» на основе требуемой реализации для устройства и передает его вам, вам не нужно знать физическую реализацию, только чтобы вы могли вызовите методы «Graphics» – MadProgrammer