Abstract type: Difference between revisions

Content added Content deleted
m (PhixClass)
(Added Wren)
Line 3,065: Line 3,065:
Sub Method_Must_Be_Implemented()
Sub Method_Must_Be_Implemented()
End Interface</lang>
End Interface</lang>

=={{header|Wren}}==
Wren doesn't support interfaces but one can effectively create an abstract class by giving it methods but no constructor. Concrete classes can then inherit from the abstract class and either override, or simply inherit, its methods appropriately.

The Go example, when rewritten in Wren, looks like this.
<lang ecmascript>import "/fmt" for Fmt

class Beast{
kind {}
name {}
cry() {}
print() { System.print("%(name), who's a %(kind), cries: %(Fmt.q(cry())).") }
}

class Dog is Beast {
construct new(kind, name) {
_kind = kind
_name = name
}
kind { _kind }
name { _name }
cry() { "Woof" }
}

class Cat is Beast {
construct new(kind, name) {
_kind = kind
_name = name
}
kind { _kind }
name { _name }
cry() { "Meow" }
}

var d = Dog.new("labrador", "Max")
var c = Cat.new("siamese", "Sammy")
d.print()
c.print()</lang>

{{out}}
<pre>
Max, who's a labrador, cries: "Woof".
Sammy, who's a siamese, cries: "Meow".
</pre>


=={{header|zkl}}==
=={{header|zkl}}==