2016-03-16 3 views
-1

Мне было интересно, как работает java.awt.Graphics, и я пошел в исходный код через NetBeans.
Я заметил, что Graphics - это класс abstract, и все функции, которые я использую, - это abstract функции
Это сделало меня делом, как я могу использовать Graphics?
Я имею в виду, что Graphics является классом abstract, и я использую объект Graphics внутри JPanel.
Как это работает? как я могу использовать его в качестве абстрактного класса без использования класса, реализующего Graphics?
Как я могу использовать Graphics - абстрактный класс

+1

Вы _are_ используете класс, который наследует его. Вы просто не знаете, какой из них. – SLaks

+0

Начните с просмотра [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/java/painting-140037.html) для получения более подробной информации о процессе рисования. «Графика» является абстрактной, поскольку она зависит от физической цели, которую она использует для рисования, для рисования на изображении, экране или принтере все требует разных реализаций. – MadProgrammer

+0

В случае экрана и принтера система создает экземпляр контекста «Graphics» на основе требуемой реализации для устройства и передает его вам, вам не нужно знать физическую реализацию, только чтобы вы могли вызовите методы «Graphics» – MadProgrammer

ответ

4

Вы не можете использовать экземпляр абстрактного класса напрямую. Абстрактные классы, такие как Graphics, не могут быть созданы; только конкретные подклассы (Графика имеет два, DebugGraphics и Graphics2D). В случае JPanel аргумент Graphics, который вы получаете в paintComponent(), на самом деле является экземпляром Graphics2D (вы можете проверить это, выполнив его). Класс Graphics2D обеспечивает реализацию абстрактных методов в Graphics.

+0

. Так почему же не рисовали вместо «Graphics2D»? почему он получает «Графика»? – Amirag

-1

Вы должны использовать одну из своих реализаций, абстрактный класс не может быть инстанцирован.

Смежные вопросы