74 lines
3.9 KiB
HTML
74 lines
3.9 KiB
HTML
<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>
|
||
<H1>Переопределение методов</H1>
|
||
<p>Метод базового класса может быть переопределен (замещен) в подклассах. Если
|
||
при этом требуется вызвать метод базового класса, то используется служебное
|
||
слово <code><b>inherited</b></code> (англ.-
|
||
унаследованный). Например:</p>
|
||
<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>
|
||
Writeln('Имя: ',name,' Возраст: ',age);<br>
|
||
<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>
|
||
Writeln('Курс: ',course,' Группа: ',group);<br>
|
||
<b>end</b>;<br>
|
||
<b>end</b>;</code></p>
|
||
<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>
|
||
<p><code> <b>procedure</b> Print;<br>
|
||
<b>begin</b><br>
|
||
<b>inherited</b>;<br>
|
||
Writeln('Курс: ',course,' Группа: ',group);<br>
|
||
<b>end</b>;<br>
|
||
</code></p>
|
||
</body>
|
||
|
||
</html> |