Java: руководство для начинающих (ЛП) - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Допустим, имеется следующий класс:class Test {int a;Test(int i) { a = i; }}Напишите метод swap (), реализующий обмен содержимым между двумя объектамитипа Test, на которые ссылаются две переменные данного типа.void swap(Test obi, Test ob2) {int t;t = obi.a;obi.a = ob2.a;ob2.a = t;}
Правильно ли написан следующий фрагмент кода?class X {int meth(int a, int b) { ... }String meth(int a, int b) { ... }Нет, неправильно. Перегружаемые методы могут возвращать значения разного типа,но это не играет никакой роли для определения подобных методов во время их перегрузки. Перегружаемые методы должны иметь в своих списках разнотипные параметры.
Напишите рекурсивный метод, отображающий строку задом наперед.// Отображение строки задом наперед с помощью рекурсии,class Backwards {String str;Backwards(String s) {str = s;}void backward(int idx) {if(idx != str.length()-1) backward(idx+1);System.out.print(str.charAt(idx) ) ;}}class BWDemo {public static void main(String args[]) {Backwards s = new Backwards("This is a test");s.backward(0);}}
Допустим, что все объекты класса должны совместно пользоваться одной и той жепеременной. Как объявить такую переменную?Переменная, предназначенная для совместного использования, должна быть объявлена как static.
Для чего может понадобиться статический блок?Статический блок служит для выполнения любых инициализирующих действий вклассе до создания конкретных объектов.
Что такое внутренний класс?Внутренний класс — это нестатический вложенный класс.
Допустим, требуется член класса, к которому могут обращаться только другие членыэтого же класса. Какой модификатор доступа следует использовать в его объявлении?Модификатор доступа private.
Имя метода и список его параметров вместе составляют метода.сигнатуру
Если методу передается значение типа int, то в этом случае используется передачапараметра по .значению
Создайте метод sum () с аргументами переменной длины для суммирования передаваемых ему значений типа int. Метод должен возвращать результат суммирования.Продемонстрируйте его в действии.Существует много вариантов решения данной задачи. Ниже представлен один из них.Приложение А. Ответы на вопросы для самопроверки 571class Sumlt {int sum(int ... n) {int result = 0;for(int i = 0; i < n.length; i++)result += n[i];return result;}}class SumDemo {public static Void main(String args[]) {Sumlt siObj = new Sumlt();int total = siObj.sum(l, 2, 3);System.out .println (1,Sum is " + total);total = siObj.sum(l, 2, 3, 4, 5);System.out.println("Sum is " + total);}}
Можно ли перегружать метод с аргументами переменной длины?Да, можно.
Приведите пример неоднозначного вызова перегружаемого метода с переменнымчислом аргументов.Ниже приведен один из вариантов перегружаемого метода с переменным числом аргументов, при вызове которого проявляется неоднозначность.double myMeth(double ... v ) { // ...double myMeth(double d, double ... v) { // ...Если попытаться вызвать метод myMeth () с одним аргументом следующим образом:myMeth(1.1);то компилятор не сможет определить, какой именно метод вызывается.Глава 7. Наследование
Имеет ли суперкласс доступ к членам подкласса? Имеет ли подкласс доступ к членам суперкласса?Нет, не имеет. Суперклассу ничего не известно о существовании подклассов.Подклассы действительно могут обращаться ко всем членам суперкласса, кроме тех,которые объявлены как закрытые (private).
Создайте подкласс Circle, производный от класса TwoDShape. В нем долженбыть определен метод area (), вычисляющий площадь круга, а также конструкторс ключевым словом super для инициализации членов, унаследованных от классаTwoDShape.// Подкласс, производный от класса TwoDShape для формы круга,class Circle extends TwoDShape {// Конструктор по умолчаниюCircle () {super();}// Конструктор класса CircleCircle(double х) {super(x, "circle"); // вызвать конструктор суперкласса}// создать новый объект из имеющегося объектаCircle(Circle ob) {super(ob); // передать объект конструктору класса ?PwoDShape}double area () {return (getWidth() /2) (getWidth() / 2) 3.1416;}}
Как предотвратить обращение к членам суперкласса из подкласса?Для того чтобы предотвратить доступ к членам суперкласса из подкласса, эти членыследует объявить как закрытые (private).
Опишите назначение и два варианта использования ключевого слова super.Ключевое слово super используется в двух случаях. Во-первых, с его помощью вызывается конструктор суперкласса. В этом случае общая форма вызова имеет следующий вид:super (списокпараметров) ;И во-вторых, это ключевое слово обеспечивает доступ к членам суперкласса. Нижеприведена общая форма такого доступа.super.членкласса
Допустим, имеется следующая иерархия классов:class Alpha { ...class Beta extends Alpha { ...Class Gamma extends Beta { ...В каком порядке вызываются конструкторы этих классов при создании объектакласса Gamma?Конструкторы всегда вызываются в порядке наследования. Таким образом, присоздании экземпляра класса Gamma будет сначала вызван конструктор Alpha, затемBeta и, наконец, Gamma.
Переменная ссылки на суперкласс может указывать на объект подкласса. Объясните,почему это важно и как это связано с переопределением методов?Когда переопределяемый метод вызывается по ссылке на суперкласс, его вариантопределяется по типу объекта, на который делается ссылка.
Что такое абстрактный класс?Приложение А. Ответы на вопросы для самопроверки 573Абстрактным называется такой класс, который содержит хотя бы один абстрактныйметод.
Как предотвратить переопределение метода? И как предотвратить наследованиекласса?Для того чтобы метод нельзя было переопределить, его нужно объявить как final.А для того чтобы предотвратить наследование от класса, его следует объявить какfinal.
Объясните, каким образом механизмы наследования, переопределения методов иабстрактные классы используются для поддержки полиморфизма.Наследование, переопределение методов и абстрактные классы поддерживают полиморфизм и позволяют создать обобщенную структуру, реализуемую различнымиклассами. Так, абстрактный класс определяет согласованный интерфейс, общий длявсех реализующих его классов. Такой подход соответствует принципу “один интерфейс — множество методов”.
Какой класс является суперклассом всех остальных классов?Класс Object.П. Класс, который содержит хотя бы один абстрактный метод, должен быть объявленабстрактным. Верно или не верно?Верно.
Какое ключевое слово следует использовать для создания именованной константы?Ключевое слово final.Глава 8. Пакеты и интерфейсы
Используя код, созданный в примере для опробования 8.1, поместите в пакет qpackинтерфейс ICharQ и все три реализующие его класса. Класс IQDemo должен остаться в пакете, используемом по умолчанию. Покажите, как импортировать и использовать классы из пакета qpack.Для того чтобы включить интерфейс ICharQ и реализующие его классы в пакетqpack, следует поместить каждый из них в отдельный файл, объявить все классы,реализующие данный интерфейс, как public, а в начале каждого файла ввести следующий оператор:package qpack;После этого можно воспользоваться пакетом qpack, добавив в интерфейс IQDemoследующий оператор import:import qpack.*;
Что такое пространство имен? Почему так важна возможность его разделения на отдельные области в Java?Пространство имен — это область объявлений. Разделяя пространство имен на отдельные области, можно предотвратить конфликты имен.
Содержимое пакетов хранится в .каталогах
В чем отличие доступа, определяемого ключевым словом protected, от доступа поумолчанию?Член класса с доступом типа protected может быть использован в пределах текущего пакета, а также в подклассах данного класса, относящихся к любому пакету.А член класса с доступом по умолчанию может быть использован только в пределахтекущего пакета.
Допустим, классы, содержащиеся в одном пакете, требуется использовать в другомпакете. Какими двумя способами можно этого добиться?Для того чтобы воспользоваться членом пакета, нужно указать его имя полностьюили же импортировать этот член с помощью оператора import.