2018-08-02 22:04:49 +03:00
|
|
|
|
<html>
|
|
|
|
|
|
|
|
|
|
|
|
<head>
|
|
|
|
|
|
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
|
|
|
|
|
<param name="Keyword" value="inherited">
|
|
|
|
|
|
</object>
|
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
|
|
|
|
|
<title></title>
|
|
|
|
|
|
<link rel="StyleSheet" href="../../default.css">
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
<body>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<H1>Переопределение методов</H1>
|
|
|
|
|
|
<p>Метод базового класса может быть переопределен (замещен) в подклассах. Если
|
|
|
|
|
|
при этом требуется вызвать метод базового класса, то используется служебное
|
|
|
|
|
|
слово <code><b>inherited</b></code> (англ.-
|
|
|
|
|
|
унаследованный). Например:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<p><code><b>type</b><br>
|
|
|
|
|
|
Person =<b> class<br>
|
|
|
|
|
|
private</b><br>
|
|
|
|
|
|
name: <b>string</b>;<br>
|
|
|
|
|
|
age: integer;<br>
|
|
|
|
|
|
<b> public</b><br>
|
|
|
|
|
|
<b>constructor</b> Create(nm: string; ag: integer);<br>
|
|
|
|
|
|
<b>begin</b><br>
|
|
|
|
|
|
name := nm; <br>
|
|
|
|
|
|
age := ag;<br>
|
|
|
|
|
|
<b>end</b>;<br>
|
|
|
|
|
|
<b>procedure</b> Print;<br>
|
|
|
|
|
|
<b>begin</b><br>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
Writeln('Имя: ',name,' Возраст: ',age);<br>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<b>end</b>;<br>
|
|
|
|
|
|
<b>end</b>;<br>
|
|
|
|
|
|
<br> Student =<b> class</b>(Person)<br>
|
|
|
|
|
|
<b> private</b><br>
|
|
|
|
|
|
course, group: integer;<br>
|
|
|
|
|
|
<b> public</b><br>
|
|
|
|
|
|
<b>constructor</b> Create(nm: <b>string</b>; ag,c,gr:
|
|
|
|
|
|
integer);<br>
|
|
|
|
|
|
<b>begin</b><br>
|
|
|
|
|
|
<b>inherited</b> Create(nm,ag);<br>
|
|
|
|
|
|
course := c; <br>
|
|
|
|
|
|
group := gr;<br>
|
|
|
|
|
|
<b>end</b>;<br>
|
|
|
|
|
|
<b>procedure</b> Print;<br>
|
|
|
|
|
|
<b>begin</b><br>
|
|
|
|
|
|
<b>inherited</b> Print;<br>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
Writeln('Курс: ',course,' Группа: ',group);<br>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<b>end</b>;<br>
|
|
|
|
|
|
<b>end</b>;</code></p>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Здесь метод <code>Print</code> производного класса <code>Student</code>
|
|
|
|
|
|
вызывает вначале метод <code>Print</code>, унаследованный от базового класса
|
|
|
|
|
|
<code>Person</code>, с помощью конструкции <code><b>inherited</b> Print</code>.
|
|
|
|
|
|
Аналогично конструктор <code>Create</code> класса <code>Student</code> вызывает
|
|
|
|
|
|
вначале конструктор <code>Create</code> базового класса <code>Person</code>,
|
|
|
|
|
|
также используя служебное слово <code><b>inherited</b></code>. </p>
|
|
|
|
|
|
<p>Правила наследования конструкторов рассматриваются
|
|
|
|
|
|
<a href="constrinheritance.html">здесь</a>.</p>
|
|
|
|
|
|
<p>Следует обратить
|
|
|
|
|
|
внимание, что конструктор базового класса вызывается в этом случае как процедура, а не как
|
|
|
|
|
|
функция, при этом создания нового объекта не происходит.</p>
|
|
|
|
|
|
<p>Если в методе вызывается метод базового класса с теми же параметрами, то
|
|
|
|
|
|
можно использовать запись <span lang="en-us">inherited</span>, не указывая имя
|
|
|
|
|
|
метода и параметры. Например, метод <code>Student.Print</code> можно записать
|
|
|
|
|
|
таким образом:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<p><code> <b>procedure</b> Print;<br>
|
|
|
|
|
|
<b>begin</b><br>
|
|
|
|
|
|
<b>inherited</b>;<br>
|
2025-11-11 22:04:03 +03:00
|
|
|
|
Writeln('Курс: ',course,' Группа: ',group);<br>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<b>end</b>;<br>
|
|
|
|
|
|
</code></p>
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
|
|
|
|
|
</html>
|