Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум_ОООП_для ДО (1).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
755.2 Кб
Скачать

Абстрактные методы

Объявляются при помощи ключевого слова abstract:

abstract void my_f1();

Абстрактный метод не имеет тела, нельзя даже ставить { }. Эти методы удобно использовать, если необходимо, чтобы метод присутствовал во всех классах потомках, но во всех классах имел разную реализацию.

Рис. 3.1. Абстрактный метод и его реализация

Метод “зарплата” абстрактный. При создании производных классов этот метод переопределяется так, как нужно в каждом из них.

Пример:

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;

}

}

В классе-потомке абстрактный метод имеет свою реализацию. Если мы объявили какой-то метод класса абстрактным, то и весь класс нужно объявить абстрактным. В абстрактных классах нельзя создавать экземпляры абстрактного класса, но можно объявить объектную ссылку: worker w.

Экземпляр:

worker w = new worker(); //нельзя создавать

Абстрактный класс может содержать и неабстрактные методы.

Методы final

Эти методы объявляются как окончательные, не подлежащие дальнейшему переопределению при наследовании.

final void my_fun( )

{…}

Ключевое слово final нельзя использовать для абстрактных методов.

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

Область видимости переменных

Если объявляется переменная, то она доступна от точки объявления до конца блока, в котором она объявлена. Во внутреннем блоке видны переменные, объявленные во внешнем блоке, но не наоборот. Если переменные объявляются с одинаковыми именами во внутреннем и внешнем блоке, то во внутреннем блоке внешнее имя скрыто внутренним переопределением, то есть во внутреннем блоке видно только внутреннее объявление переменной.

Переменные this и super

Если необходимо обратиться к элементам собственного класса, то используется переменная this. Доступ к super-классу или родительскому классу осуществляется при помощи переменной super (если как переменная, то без ( ); если как конструктор, то super( );).

Использовать такую переменную удобно, если в производном классе используется переопределённый метод, в котором используется код исходного метода. Часто переменная super используется для вызова конструктора базового класса в конструкторе производного класса.

Пример:

class my_class2 extends my_class1

{ ………….

public static void f1(int x, int y)

{ …………..

super.f1(x,y);

………… }

public my_class2(String str)

{ super(str1);

……….}

}

super и this неприменимы в классе с модификатором static.

Пример:

class MyClass

{ String s;

int i;

void f1(char c)

{ this.i=3; } //можно i=3

}

this используется в методах при обращении к элементам этого же класса.