Java programming выпуск 24-й
Здравствуйте дорогие читатели!
Начинающим
Классы (продолжение)
Наследование
Вторым фундаментальным свойством объектно-ориентированного подхода является наследование (первый – инкапсуляция). Классы-потомки имеют возможность не только создавать свои собственные переменные и методы, но и наследовать переменные и методы классов-предков. Классы-потомки принято называть подклассами. Непосредственного предка данного класса называют его суперклассом. В очередном примере показано, как расширить класс Point таким образом, чтобы включить в него третью координату z.
class Point3D extends Point { int z; Point3D(int x, int y, int z) { this.x = x; this.у = у; this.z = z; } Point3D() { this(-1,-1,-1); } }
В этом примере ключевое слово extends используется для того, чтобы сообщить транслятору о намерении создать подкласс класса Point. Как видите, в этом классе не понадобилось объявлять переменные х и у, поскольку Point3D унаследовал их от своего суперкласса Point.
Вероятно, программисты, знакомые с C++, очевидно ожидают, что сейчас мы начнем обсуждать концепцию множественного наследования. Под множественным наследованием понимается создание класса, имеющего несколько суперклассов. Однако в языке Java ради обеспечения высокой производительности и большей ясности исходного кода множественное наследование реализовано не было. В большинстве случаев, когда требуется множественное наследование, проблему можно решить с помощью имеющегося в Java механизма интерфейсов.
super
В примере с классом Point3D частично повторялся код, уже имевшийся в суперклассе. Вспомните, как во втором конструкторе мы использовали this для вызова первого конструктора того же класса. Аналогичным образом ключевое слово super позволяет обратиться непосредственно к конструктору суперкласса (в Delphi / С++ для этого используется ключевое слово inherited).
class Point3D extends Point { int z; Point3D(int x, int у, int z) { super(x, y); // Здесь мы вызываем конструктор суперкласса this.z=z; } public static void main(String args[]) { Point3D p = new Point3D(10, 20, 30); System.out.println( " x = " + p.x + " y = " + p.y + " z = " + p.z); } }
Вот результат работы этой программы:
x = 10 у = 20 z = 30
Тема "на заказ"
Мобильная Java
В сегодняшнем номере я бы хотел затронуть тему мобильной Java, а точнее проблему переносимости программ.
Мной была написана небольшая игрушка «JavaPortal Championship racing F1» – гонки F1.
Я попытался сделать её более универсальной, так чтобы она работала на большинстве мобильных телефонов. Но под рукой у меня не нашлось такого множества телефонов, и я воспользовался эмуляторами.
Я использовал эмуляторы следующих телефонов:
- Siemens C55/sl45i;
- Почти весь ряд Motorola;
- Nokia 6310;
- Sony Ericsson P800;
- и стандартные из WTK.
На всех телефонах была хорошая картинка, за исключением некоторых моделей с маленькими ( очень маленькими) экранами где картинка была урезана сверху. На модели Sony Ericsson P800 экран казался слишком пустоватым, так как игрушка все же рассчитана на массовые модели, а не на таких «монстров».
Единственная проблема возникла на всех моделях Siemens, игрушка мигала и тормозила. Я думаю это связано с некоторыми недоработками в JVM Siemens.
Эта же картина наблюдалась и на реальных телефонах, хотя тестируемых моделей было совсем мало.
Я прошу вас оказать содействие, и помочь с тестированием игрушки на других моделях телефонов, дабы выявить узкие места.
Подробнее об игре можете посмотреть тут, там же ссылки на файлы.
Присылайте свои отзывы и предложения мне на E-mail.
Вопрос - ответ
Вопрос:
Скажите, как я могу использовать RMI.
|
Ответ: |
Вопрос:
Добрый день. Не подскажите как можно автоматически получать
(обрабатывать) почтовые сообщения используя Java
технологии.
|
Ответ: |
Вопрос:
Почему-то в апплете не могу нарисовать линии и всякую прочую лабуду.
Везде написано что надо делать так
|
Ответ: import java.applet.*; import java.awt.*; public class Applet1 extends Applet { public Applet1() { } public void paint(Graphics g) { g.drawLine(10,10,100,100); } } |
Вопрос: Здравствуйте.
Как в jave отобразить html-страничку в апплет или в
какое-нибудь окно. Я нашел пакет
javax.swing.text.html, но так и не понял его
возможности.
|
Ответ: JEditorPane jp = new JEditorPane(); try { URL url = getClass().getResource("1.html"); jp = new JEditorPane(url); jp.setEditable(false); } catch (Exception ex) { jp.setText("Loading error "); } getContentPane().add(jp);Правда это будет просто неактивная страничка. Для перехода по ссылкам. Необходимо создать HyperlinkListener обрабатывающий события. Как это делается можете посмотреть в разделе «Программный код…» |
Вопрос: В каких случаях лучше использовать String, а в каких StringBuffer?
|
Ответ: Вот посмотрте String против StringBuffer. |
Программный код…
import javax.swing.*; import javax.swing.event.*; import javax.swing.text.html.*; import java.io.*; import java.net.URL; public class Applet1 extends JApplet { JEditorPane jp = new JEditorPane(); public Applet1() { try { URL url = getClass().getResource("1.html"); jp = new JEditorPane(url); jp.setEditable(false); jp.addHyperlinkListener(createHyperLinkListener()); } catch (Exception ex) { jp.setText("Loading error "); } getContentPane().add(jp); } public HyperlinkListener createHyperLinkListener() { return new HyperlinkListener() { public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { if (e instanceof HTMLFrameHyperlinkEvent) { ((HTMLDocument)jp.getDocument()).processHTMLFrameHyperlinkEvent( (HTMLFrameHyperlinkEvent)e); } else { try { jp.setPage(e.getURL()); } catch (IOException ioe) { jp.setText("IOE: " + ioe); } } } } }; } }
JavaScript
Вопрос:
У меня такое задание: "Менять цвет фона с интервалом 1сек отдельно генерируя красную, зелёную и синюю компоненты цвета". Главная проблема - как эти компоненты сгрупировать в одно число в 16-ричном коде, либо сделать так чтобы воспринималась каждая компонента по отдельности.
Подскажите пожалуйста в чём здесь ошибка.
|
Ответ: Я бы сделал вот так: <html> <head> <script language="JavaScript"> s=1000; function flash() { colred = Math.round(0xff*Math.random()); colgreen = Math.round(0xff*Math.random()); colblue = Math.round(0xff*Math.random()); aaa=""+colred+""+colgreen+""+colblue; document.bgColor=aaa; setTimeout('flash()', s); } </script> </head> <body bgcolor="00ff00" onLoad='flash()'> </body> </html> |
Вопрос: Помогите разобраться с применением фильтров для создания эффектов загрузки изображений.
|
Ответ:
Вот посмотрите пример. |
Вопросы присылайте на E-mail
[email protected] с пометкой "Вопрос по Java".
Или задавайте их на форуме
Жду вопросов и предложений.