Имя метода и список его параметров вместе составляют метода. сигнатуру
Если методу передается значение типа int, то в этом случае используется передача параметра по . значению
Создайте метод sum () с аргументами переменной длины для суммирования передаваемых ему значений типа int. Метод должен возвращать результат суммирования. Продемонстрируйте его в действии. Существует много вариантов решения данной задачи. Ниже представлен один из них. Приложение А. Ответы на вопросы для самопроверки 571 class 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(); } // Конструктор класса Circle Circle(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.
“Один интерфейс — множество методов” — главный принцип Java. Какое языковое средство лучше всего демонстрирует этот принцип? Этот принцип объектно-ориентированного программирования лучше всего демонстрирует интерфейс.
Сколько классов могут реализовать один и тот же интерфейс? Сколько интерфейсов может реализовать класс? Один интерфейс может быть реализован любым количеством классов. Класс может реализовать произвольное число интерфейсов.
Может ли один интерфейс наследовать другой интерфейс? Да, может. Механизм наследования распространяется и на интерфейсы.
Создайте интерфейс для класса Vehicle, рассмотренного в главе 7, назвав его IVehicle. interface IVehicle { // возвратить дальность действия транспортного средства int range(); // рассчитать объем топлива, требующегося // для прохождения заданного пути double fuelneeded(int miles); // Методы доступа к переменным экземпляра. int getPassengers(); void setPassengers(int p); int getFuelcap(); void setFuelcap(int f); int getMpg(); void setMpg(int m); }
Переменные, объявленные в интерфейсе, неявно считаются как static и final. Какие преимущества это дает? Переменные, объявленные в интерфейсе, могут служить в качестве именованных констант, общих для всех файлов программы. Доступ к ним обеспечивается путем импорта того интерфейса, в котором они объявлены.
Пакет, по существу, является контейнером для классов. Верно или не верно? Приложение А. Ответы на вопросы для самопроверки 575 Верно.
Какой стандартный пакет импортируется по умолчанию в любую программу на Java? Пакет java.lang. Глава 9. Обработка исключений