Архив Java programming
Выпуск 24-й
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".
Или задавайте их на форуме
Жду вопросов и предложений.



Узнай о чем ты на самом деле сейчас думаешь


