Java/Основные понятия: различия между версиями

Содержимое удалено Содержимое добавлено
удаление вандализма от 31.41.88.93; возвращение к версии 46.98.223.101
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 25:
== От абстракции к программированию ==
Теперь давайте попробуем записать пример с комнатами на языке Java. Сначала создадим интерфейс.
<sourcesyntaxhighlight lang="java">
interface Capacity {
public double getCapacity(); //Заметим, что у метода пока нет тела
}
</syntaxhighlight>
</source>
 
Класс <code>Room</code> и <code>Box</code> поддерживают интерфейс <code>Capacity</code> и могут выглядеть так:
 
<sourcesyntaxhighlight lang="java" line="1">
class Room implements Capacity {
public double width;
Строка 56:
}
}
</syntaxhighlight>
</source>
 
Не будем пока обращать внимания на слово <code>public</code>, об этом мы поговорим позже в разделе [[Java/Видимость|Область видимости]]. А обратим внимание на то, что оба класса как две капли воды похожи друг на друга. Давайте вынесем одинаковую функциональность в общий класс-предок с названием <code>Base</code>:
 
<sourcesyntaxhighlight lang="java" line="1">
class Base implements Capacity {
public double width;
Строка 77:
class Room extends Base {
}
</syntaxhighlight>
</source>
 
Допустим, что в любой комнате обязательно находится один объект определенного объёма и объем комнаты не включает объема данного объекта. Тогда класс <code>Room</code> будет выглядеть так:
 
<sourcesyntaxhighlight lang="java" line="1">
class Room extends Base {
public Box inner;
Строка 90:
}
}
</syntaxhighlight>
</source>
 
Обратите внимание, что мы перезаписали метод <code>getCapacity</code> (строки 4-7) и теперь объем комнаты не включает объема внутреннего объекта.
Строка 96:
Ну вот и пришло время проверить все то, что мы написали. Для проверки создадим еще один класс.
 
<sourcesyntaxhighlight lang="java" line="1">
class Test {
public static void main(String[] args) {
Строка 112:
}
}
</syntaxhighlight>
</source>
 
Запускаем: