Переопределение методаПереопределение метода (англ. Method overriding) в объектно-ориентированном программировании — одна из возможностей языка программирования, позволяющая подклассу или дочернему классу обеспечивать специфическую реализацию метода, уже реализованного в одном из суперклассов или родительских классов. Реализация метода в подклассе переопределяет (заменяет) его реализацию в суперклассе, описывая метод с тем же названием, что и у метода суперкласса, а также у нового метода подкласса должны быть те же параметры или сигнатура, тип возвращаемого результата, что и у метода родительского класса[1]. Версия метода, которая будет исполняться, определяется объектом, используемым для его вызова. Если вызов метода происходит от объекта родительского класса, то выполняется версия метода родительского класса, если же объект подкласса вызывает метод, то выполняется версия дочернего класса[2]. Некоторые языки программирования позволяют программисту защищать методы от переопределения. ПримерыJavaВ языке программирования Java, когда подкласс содержит метод, переопределяющий метод суперкласса, то он может помимо своего метода вызывать и метод суперкласса при помощи ключевого слова public class Thought {
public void message() {
System.out.println("Я себя чувствую как стрекоза, попавшая в параллельную вселенную.");
}
}
public class Advice extends Thought {
@Override // Аннотация @Override в Java 5 является необязательной, но весьма полезной
public void message() {
System.out.println("Внимание: Даты в календаре ближе, чем кажутся!");
}
}
Класс Thought t1 = null;
t1 = new Thought();
t1.message(); // Выводит "Я себя чувствую как стрекоза, попавшая в параллельную вселенную."
t1 = new Advice(); // Полиморфизм
t1.message(); // Выводит "Внимание: Даты в календаре ближе, чем кажутся."
Слово public class Advice extends Thought {
@Override
public void message() {
System.out.println("Внимание: Даты в календаре ближе, чем кажутся.");
super.message(); // Вызов версии метода родительского класса
}
}
Невозможно для класса, объявленного как C++В языке C++ отсутствует ключевое слово class Rectangle
{
public:
virtual void print() const;
private:
double length;
double width;
};
void Rectangle::print() // метод print() базового класса
{
cout << "Length = " << length << "; Width = " << width;
}
class Box : public Rectangle
{
public:
void print() const;
private:
double height;
};
void Box::print() // метод print() производного класса
{
Rectangle::print(); // вызов родительского метода print()
cout << "; Height= " << height;
}
Метод Следующие инструкции порождают объекты с типом Rectangle myRectangle(5.0, 3.0);
myRectangle.print();
// outputs:
// Length = 5.0; Width = 3.0
Box myBox(6.0, 5.0, 4.0);
myBox.print();
// outputs:
// Length = 6.0; Width = 5.0; Height = 4.0
ПримечанияЛитература
См. также
Ссылки
|
Portal di Ensiklopedia Dunia