Sealed classes and methods: Difference between revisions
Content added Content deleted
(Created a new draft task and added a Wren example.) |
|||
Line 21: | Line 21: | ||
* [[Inheritance/Single]] |
* [[Inheritance/Single]] |
||
* [[Inheritance/Multiple]] |
* [[Inheritance/Multiple]] |
||
=={{header|Phix}}== |
|||
No support, though it would probably not be particularly difficult to add a "final" keyword if ever needed.<br> |
|||
Phix supports object orientation for the die-hards (desktop/Phix only), but does not require it be used at all.<br> |
|||
In Phix, "private" determines availability from outside [sub-]class code, but there is nothing at all to prevent Child from |
|||
having a public method that (internally) invokes a private method of the Parent, and of course/not unlike it would make no difference were name and age made private below.<br> |
|||
The Phix compiler can make exactly the same optimisations were it to spot at EOF that a class has not been overidden |
|||
as it could were it told up-front. |
|||
{{trans|Wren}} |
|||
Extended to include an under-age parent |
|||
<!--<syntaxhighlight lang="phix">(notonline)--> |
|||
<span style="color: #008080;">without</span> <span style="color: #008080;">javascript_semantics</span> <span style="color: #000080;font-style:italic;">-- no classes under p2js, sorry</span> |
|||
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #000000;">structs</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- (needed for get_struct_name)</span> |
|||
<span style="color: #008080;">class</span> <span style="color: #000000;">Parent</span> |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">name</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">age</span> |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">watch_movie</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">get_struct_name</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">this</span><span style="color: #0000FF;">)!=</span><span style="color: #008000;">"Parent"</span> <span style="color: #008080;">and</span> <span style="color: #000000;">age</span><span style="color: #0000FF;"><</span><span style="color: #000000;">15</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Sorry, %s, you are too young to watch the movie.\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">name</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #008080;">else</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s is watching the movie...\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">name</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">class</span> |
|||
<span style="color: #008080;">class</span> <span style="color: #000000;">Child</span> <span style="color: #008080;">extends</span> <span style="color: #000000;">Parent</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">class</span> |
|||
<span style="color: #000000;">Parent</span> <span style="color: #000000;">p1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"Donald"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">42</span><span style="color: #0000FF;">}),</span> |
|||
<span style="color: #000000;">p2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"Dougal"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #000000;">p1</span><span style="color: #0000FF;">.</span><span style="color: #000000;">watch_movie</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">p2</span><span style="color: #0000FF;">.</span><span style="color: #000000;">watch_movie</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">Child</span> <span style="color: #000000;">c1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"Lisa"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">18</span><span style="color: #0000FF;">}),</span> |
|||
<span style="color: #000000;">c2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"Fred"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #000000;">c1</span><span style="color: #0000FF;">.</span><span style="color: #000000;">watch_movie</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">c2</span><span style="color: #0000FF;">.</span><span style="color: #000000;">watch_movie</span><span style="color: #0000FF;">()</span> |
|||
<!--</syntaxhighlight>--> |
|||
{{out}} |
|||
<pre> |
|||
Donald is watching the movie... |
|||
Dougal is watching the movie... |
|||
Lisa is watching the movie... |
|||
Sorry, Fred, you are too young to watch the movie. |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |