Abstract public void setSalary(int newSalary);

}

class boss extends worker//потомок абстрактного (базововго) класса

{ //Пишем реализацию абстрактного метода родительского класса

Public void setSalary(int newSalary)

{

if(newSalary>=0)

Salary=newSalary;

Else

Salary=3000;

}

//... другие элементы класса

}

class еngineer extends worker//потомок абстрактного класса

{ //Пишем реализацию абстрактного метода родительского класса

Public void setSalary(int newSalary)

{ if(newAge>=0)

Salary=newSalary;

Else

Salary=2500;

}

}

Здесь объявлен класс worker, написали в нем абстрактный метод setSalary, и объявили два класса-потомка класса worker - классы boss и еngineer. В каждым из их мы пишем свою реализацию для метода setSalary.

Обратите внимание, что если объявляется некоторый метод класса абстрактным, то и весь класс надо объявить абстрактным:

abstract class worker

Экземпляры абстрактного классы создаваться не могут, но можно объявить объектную ссылку на данный класс. Это позволяет осуществлять полиморфную организации работы с массивами или списками объектов производных классов, для которых, например, как для окон на экране дисплея, необходимо регулярно выполнять определенные методы (например, перерисовывать окна). Суть в том, что можно объектную ссылку родительского класса установить на реальный экземпляр класса потомка (аналог в С++ установить указатель базового класса на объект производного) и осуществлять вызовы методов, представленных в базовом классе как абстрактные, для экземпляров объектов производных классов:

worker bigBoss=new boss(); //Это же можно записать и следующим образом:

worker bigBoss; boss в1=new boss(); bigBoss= в1;

Это значит, что в программе можно объявить массив worker, и записать в него всех работников - и инженеров, и директоров и простых работников. Тогда, если требуется начислить зарплату для всех сотрудников, необходимо перебирать элементы этого массива (аналогично способу использования указателя на базовый класс и виртуальных методов в С++) и для каждого элемента выполнить функцию начисления зарплаты (следует иметь в виду, что через объектную ссылку базового класса для экземпляра производного класса возможен запуск только методов, объявленных в базовом, в данном случае абстрактном, классе) .

Методы final могут объявляться как окончательные, не подлежащие дальнейшему переопределению (наследованию) при помощи ключевого слова final:

final void my_f1(){.....}

Если в методе не указан тип возвращаемого значения void (нет возвращаемого значения), то тип возвращаемого значения оператором return (должен совпадать с типом, который указан в объявлении метода). Ключевое слово final нельзя использовать для абстрактных методов.



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

Тело метода заключается в фигурные скобки. Фигурные скобки могут использоваться и для выделения блока операторов. В этом случае блок рассматривается, как один оператор (составной оператор).

В методах можно использовать помеченные операторы (Label:), переходы на которые используются в операторах ветвления break и continue (break Label;), например, чтобы выйти из множества вложенных блоков.

3) Интерфейсы JAVA.

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

Программы на Яве могут использовать интерфейсы для того, чтобы допускать для связанных классов разделение общего абстрактного суперкласса или для добавления методов в Object, от которого любой класс наследует по умолчанию.

Интерфейс может быть объявлен, для того чтобы быть прямым расширением одного или более интерфейсов, предполагая, что он неявно определяет все абстрактные методы и константы расширяющих его интерфейсов, кроме каких-нибудь констант, которые могут быть скрыты (частные – private).

Класс может непосредственно реализовать один или более интерфейсов, в том смысле, что любой экземпляр класса реализует все абстрактные методы заданные интерфейсом или интерфейсами. Класс обязательно реализует все интерфейсы, его непосредственные суперклассы и непосредственные суперинтерфейсы. Это (множественное) наследование интерфейса позволяет объектам поддерживать (множественное) некоторое общее поведение производного объекта.

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



Иногда говорят, что интерфейс – это Java вариант множественного наследования, запрещенного для классов JAVA. Интерфейсы определяют набор методов и констант, определяющих некоторый стандартный интерфейс, который реализуется классом. Интерфейсы близки к классам.

Формальное определение :

Модификатор_доступа имя _интерфейса {


6359664426931690.html
6359701810978019.html
    PR.RU™