Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
129
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

2.12. Метод toString

Если объект включает общедоступный (public) метод toString, который не получает параметров и возвращает объект String, то данный метод вызывается каждый раз, когда объект этого типа встречается вместо строки в операторе + или +=. Например, следующий фрагмент выводит содержимое массива небесных тел:

static void displayBodies(Body[] bodies) {

for (int i = 0; i < bodies.length; i++)

System.out.println(i + “: ” + bodies[i]);

}

Если повнимательнее присмотреться к вызовуprintln, можно обнаружить два неявных приведения к строковым значениям: первое— для индекса i и второе— для объекта Body. Значения всех примитивных типов неявно преобразуются в объекты String при использовании в подобных выражениях.

В Java не существует универсального механизма для преобразования значения типа String в объект. Разумеется, вы можете включить в класс свою собственную функцию для подобного приведения. Обычно для этого используется некий аналог метода fromString, изменяющий текущее состояние объекта, либо конструктор, принимающий параметр типа String, который определяет исходное состояние объекта.

Упражнение 2.15

Включите в класс Vehicle метод toString.

Упражнение 2.16

Включите в класс LinkedList метод toString.

2.13. Родные методы

Если вам потребовалось написать на Java программу, в которой должен использоваться код, написанный на другом языке программирования, или если вам приходится напрямую работать с какой-либо аппаратурой, можно прибегнуть к помощи родных (native) методов. Родной метод может вызываться из программы на Java, но пишется он на “родном” языке— обычно на C или C++.

При использовании родных методов о переносимости и надежности программы говорить не приходится. Например, родные методы нельзя применять в коде, который должен пересылаться по сети и выполняться на другом компьютере (скажем, в аплетах)— его архитектура может отличаться от вашей, но даже если они и совпадают, удаленный компьютер может попросту не доверять вашей системе настолько, чтобы разрешить запускать у себя откомпилированную программу наC.

Сведения, касающиеся написания родных методов, приведены в Приложении A.

Глава 3 расширение классов

Вы поймете меня, если я скажу, что могу проследить свою родословную вплоть до частиц первичной протоплазмы. Гильберт и Салливан, The Mikado

Во время экскурсии мы кратко познакомились с тем, как происходит расширение, или субклассирование, благодаря которому расширенный класс может использоваться вместо исходного. Такая возможность носит название полиморфизма— это означает, что объект данного класса может выступать в нескольких видах, либо самостоятельно, либо в качестве объекта расширяемого им суперкласса. Класс по отношению к расширяемому им классу называется подклассом, или расширенным классом; расширяемый класс, в свою очередь, называется суперклассом.

Набор членов класса (методов и полей), доступных за его пределами, в совокупности с их ожидаемым поведением часто именуется контрактом класса. Контракт— это то, что должен делать класс в соответствии с обещаниями его разработчика. Каждый раз, когда вы расширяете класс и добавляете в него новые функции, вы тем самым создаете новый класс с расширенным контрактом. Тем не менее к модификации части контракта, унаследованной от расширяемого класса, следует подходить с осторожностью; можно улучшить способ реализации контракта, однако изменения не должны нарушать контракт суперкласса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]