Метод (программирование)Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая[1] какому-то классу или объекту. Как и процедура в процедурном программировании, метод состоит из некоторого количества операторов для выполнения какого-то действия и имеет набор входных аргументов. Различают простые методы и статические методы (методы класса):
Методы предоставляют интерфейс, при помощи которого осуществляется доступ к данным объекта некоторого класса, тем самым, обеспечивая инкапсуляцию данных. В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:
Такое разделение интерфейсов позволяет сохранять неизменным открытый интерфейс, но изменять внутреннюю реализацию. КонструкторыКонструктор — это метод, вызываемый в начале жизненного цикла объекта для создания и инициализации объекта. Конструкторы могут иметь параметры, но обычно не возвращают значения в большинстве языков. См. следующий пример на Java: public class Main {
String _name;
int _roll;
Main(String name, int roll) { // метод конструктора
this._name = name;
this._roll = roll;
}
}
Абстрактные методыАбстрактный метод имеет только сигнатуру и не имеет тела реализации. Он часто используется, чтобы указать, что подкласс должен обеспечить реализацию метода. Абстрактные методы используются для указания интерфейсов в некоторых языках программирования.[2] ПримерСледующий код Java показывает абстрактный класс, который необходимо расширить: abstract class Shape {
abstract int area(int h, int w); // сигнатура абстрактного метода
}
Следующий подкласс расширяет основной класс: public class Rectangle extends Shape {
@Override
int area(int h, int w) {
return h * w;
}
}
РеабстракцияЕсли подкласс обеспечивает реализацию абстрактного метода, другой подкласс может снова сделать его абстрактным. Это называется реабстракцией. На практике это используется редко. ПримерВ C#, виртуальный метод можно переопределить абстрактным методом. (Это также относится к Java, где все незащищенные методы являются виртуальными.) class IA
{
public virtual void M() { }
}
abstract class IB : IA
{
public override abstract void M(); // разрешено
}
Методы интерфейсов по умолчанию также могут быть реабстрагированы, требуя подклассов для их реализации. (Это также относится к Java.) interface IA
{
void M() { }
}
interface IB : IA
{
abstract void IA.M();
}
class C : IB { } // ошибка: класс 'C' не реализует 'IA.M'.
См. такжеПримечания
|