Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по Java

  Все выпуски  

Уроки по Java


Информационный Канал Subscribe.Ru

Основы Java. Уроки с сайта http://progs.biz

Рассылка №6

Основы Java. Урок 11. Конструкторы классов.
Основы Java. Урок 12. Абстрактные методы.

Полные версии уроков (с картинками) можно найти по адресам
Урок 11. Конструкторы классов.
Урок 12. Абстрактные методы.

Введение в Java. Урок 11. Конструкторы классов

Конструкторы предназначены для задания ннекоторых стандартных значений для переменных-членов класса. Конструктор - это тот же метод класса, только обладающий некоторым количеством особенностей. Раз это метод, значит мы должны после его имени писать круглые скобки, в которых мы можем писать или не писать параметры и т. п. Но есть и несколько черт, отличающих конструктор от других методов класса. Вот они:

Конструктор всегда называется так же, как и класс (т. е. если класс, скажем, называется worker, то и контруктор будет называться worker).

Конструктор в отличие от других методов вызывается сам в момент создания экземпляра класса.

Конструктор не возвращает никакого значения. Это значит, что если перед любым другим методом мы пишем тип возвращаемого значения (int, float и т. п.), то перед конструктором ничего писать не надо (void тоже писать не надо).

Приведем пример конструкторов для класса worker:

class worker
{
    private int Age;
    public String Name;
    //Конструктор без параметров
    public worker()
    {
        Age=20;
    }
    //Конструктор с параметрами
    public worker(int newAge, String newName)
    {
        Age=newAge;
        Name=newName;
    }
    ...
}

Посмотреть на действия конструкторов в тестовом классе можно так:

        ...
        worker wrk1=new worker();
        worker wrk2=new worker(40, "Petrov");
        System.out.println(wrk1.getAge() + "\n" + wrk1.Name);
        System.out.println(wrk2.getAge() + "\n" + wrk2.Name);
        ...

Для первого работника вызовется конструктор без параметров и его возраст установится в 20, для второго - конструктор с параметрами, и его возраст станет равным 40, а имя - Petrov

Если вы не заведете в классе конструктора, то компилятор java создаст его сам. Это, кстати, видно в примере урока 9:

worker wrk=new worker();

Здесь worker() - это как раз вызов конструктора без параметров. Создаваемый по умолчанию конструктор ничего не делает.

Наверх

Введение в Java. Урок 12. Абстрактные методы

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

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

abstract class worker
{
    protected int Age;
    public String Name;
    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'ов, и записать в него всех работников - и инженеров, и директоров и простых рабтников. И тогда, если вам надо начислить зарплату для всех, то вы просто перебираете элементы этого массива.

Наверх

Рассылки сайта progs.biz:

Рассылки Subscribe.Ru
Обзор книг по программированию

Обзор новых книг по программированию. Включает книги как по традиционному программированию (Visual C++, Delphi, Visual Basic, C#, Java,...), так и по WEB-программированию (JavaScript, PHP, ASP, ASP.NET, Perl,...). Кроме того, предполагается обзор книг по копьютерным сетям, безопасности, сертификации и др.


Copyright Алексеев Игорь, 2002

Copyright Osco do Casco, 2002

Copyright сайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное