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}}==