Динамические методы и переменные всегда являются элементами объекта класса, и доступ к ним осуществляется через переменную-объект.



ИмяОбъекта.ИмяПеременнойЭкземпляра

ИмяОбъекта.ИмяМетодаЭкземпляра(<Параметры>)

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

ИмяКласса.ИмяПеременнойКласса

ИмяКласса.ИмяМетодаКласса(<Параметры>)

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

Пример 1.2. Файл TestElements.java

class StaticAndDynamic {

int i=0;                 // переменная экземпляра

static int j=0;      // переменная класса

// статические методы

static void setJ(int k)  {

System.out.println("Static Method"); j=k;

}

static int getJ()   {

System.out.println("Static Method"); return j;

}

// динамические методы

void setI(int k)   {

System.out.println("Dynamic Method"); i=k;

}

int getI()              {

System.out.println("Dynamic Method"); return i;

}

int summa()   {

// в динамических методах можно использовать статические переменные

System.out.println("Dynamic Method"); return i+j;

}

}

public class TestElements     {

public static void main(String args[]) {

 int ii,jj;

// использование статической переменной

 StaticAndDynamic.j=6; jj=StaticAndDynamic.j;

System.out.println("Main, jj="+jj);

// вызов статических методов

StaticAndDynamic.setJ(4);

jj=StaticAndDynamic.getJ();

System.out.println("Main, jj="+jj);

 

StaticAndDynamic obj=new StaticAndDynamic();

// использование динамической переменной

obj.i=3; ii=obj.i;

System.out.println("Main, ii="+ii);

// вызов динамическим методов

obj.setI(8); ii=obj.getI();

System.out.println("Main, ii="+ii);

ii=obj.summa();

System.out.println("Main, summa="+ii);

}

}

 

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

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

Элемент, объявленный с модификатором protected (защищенный) в некоем классе A, доступен во всех классах, являющихся подклассами класса A.

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

Если тип доступа к элементу не указан (доступ по умолчанию), то он доступен из всех классов, входящих в данный пакет.

 

Пример 1.3. Файл TestModificators.java

class A       {

private int n;          

A() { k=2; n=11; }

int summa() { return k+n; }                

public int getN() { return n; }

public void setN(int nn) { n=nn; }

}

 

class TestModificators           {

public static void main(String args[]) {

A obj=new A();           // создание объекта класса A

// получить значение переменных

int kk=obj.k;   System.out.println("k="+kk);

int nn=obj.getN();       System.out.println("n="+nn);

obj.k=10;     obj.setN(15);

int s=obj.summa();    System.out.println("summa="+s);

}

}

Наследование классов

 

Наследование (inheritance), упрощает практическое использование классов, так как позволяет расширять уже написанные и отлаженные классы, добавляя к ним новые свойства и возможности. Таким образом создается то, что называется подклассом первоначального класса. Класс, который при этом наследуется (расширяется), называется суперклассом. При расширении класса имеется возможность использования всех написанных и отлаженных методов этого класса. Это свойство, называемое повторным использованием кода (code reuse), является одним из главных преимуществ объектно-ориентированного программирования.

Для задания наследования указывается ключевое слово extends. Например, объявление класса MyClass подклассом класса SuperClass, можно записать так:

class MyClass extends SuperClass     { ..}

Специальные переменные

 

Каждый класс Java содержит три заранее определенные переменные, которыми можно пользоваться: null, this, super. Первые две переменные относятся к типу Object. Коротко говоря, nullпредставляет собой несуществующий объект, this указывает на текущий экземпляр класса, переменная superразрешает доступ к открытым переменным и методам, определенным в суперклассе.

Переменная null. Прежде чем использовать какой-то класс, его нужно реализовать, т.е. создать объект (экземпляр) этого класса. До этого ссылка на объект имеет значение null.

Переменная this. Переменная this используется для указания ссылки на переменную экземпляра. Переменная this всегда указывает на текущий класс, поэтому, чтобы в методе получить доступ к скрытой переменной, объявленной в текущем классе, нужно явным образом указать принадлежность переменной к классу:

this. ИмяПеременной

Еще одна возможность использования этой ссылочной переменной -вызов в конструкторе класса другого конструктора этого же класса:

this(<ПараметрыДругогоКонструктораКласса>);

Переменная super. Переменная superссылается на суперкласс объекта. При помощи нее можно получить доступ к затененным переменным и замещенным методам родительскогокласса. Затенение переменной класса в его подклассе возникает при объявлении в подклассе переменной с таким же именем, что и имя переменной суперкласса.  

super.ИмяПеременной

При замещении метода в классе создается метод, имеющий то же самое имя и список параметров, что и метод в суперклассе. Однако можно использовать переменную super для выполнения замещенного метода суперкласса:

super.ИмяМетодаСуперкласса(ПараметрыМетодаСуперкласса);

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

super(<ПараметрыКонструктораСуперкласса>;

Этот оператор должен быть первым исполняемым оператором конструктора.

Пакеты и импортирование

 


Дата добавления: 2019-11-16; просмотров: 181; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!