Читать «Java: руководство для начинающих» онлайн - страница 360

Герберт Шилдт

Имя метода и список его параметров вместе составляют метода. сигнатуру

Если методу передается значение типа 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.