Super
Super( ...param : any )
Super : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
param | any | -> | Parámetro(s) a pasar al constructor de la clase padre |
Result | Object | <- | Padre del objeto |
La palabra clave Super
permite llamar a la superclass
, es decir, la clase padre.
Super
tiene dos propósitos diferentes:
- Inside a [constructor code]((../Concepts/classes.md#class-constructor),
Super
is a command that allows to call the constructor of the superclass. When used in a constructor, theSuper
command appears alone and must be used before theThis
keyword is used.
- Si todos los class constructors en el árbol de herencia no son llamados correctamente, se genera el error -10748. Es responsabilidad del desarrollador 4D asegurarse de que las llamadas sean válidas.
- Si el comando
This
es llamado en un objeto cuyas superclases no han sido construidas, se genera el error -10743. - Si se llama a
Super
fuera de un contexto de objeto, o en un objeto cuyo constructor de superclase ya ha sido llamado, se genera el error -10746.
// dentro del constructor myClass
var $text1; $text2 : Texto
Super($text1) //llamada del constructor de la superclase con un parámetro texto
Este. aram:=$text2 // usar un segundo parámetro
- Inside a class function,
Super
designates the prototype of thesuperclass
and allows to call a function of the superclass hierarchy.
Super.doSomething(42) //llama a la función "doSomething"
//declarada en superclases
Ejemplo 1
Este ejemplo ilustra el uso de Super
en un class constructor. El comando es llamado para evitar duplicar las partes del constructor que son comunes entre las clases Rectangle
y Square
.
// Class: Rectangle
Class constructor($width : Integer; $height : Integer)
This.name:="Rectangle"
This.height:=$height
This.width:=$width
Function sayName()
ALERT("Hi, I am a "+This.name+".")
// Function definition
Function getArea() : Integer
return (This.height)*(This.width)
//Class: Square
Class extends Rectangle
Class constructor ($side : Integer)
// It calls the parent class's constructor with lengths
// provided for the Rectangle's width and height
Super($side;$side)
// In derived classes, Super must be called
// before you can use 'This'
This.name:="Square"
Function getArea() : Integer
return This.height*This.width
Ejemplo 2
This example illustrates the use of Super
in a class function. Ha creado la clase Rectangle
con una función:
//Class: Rectangle
Function nbSides() : Text
return "I have 4 sides"
También creó la clase Square
con una función que llama a la función superclase:
//Class: Square
Class extends Rectangle
Function description() : Text
return Super.nbSides()+" which are all equal"
Entonces puede escribir en un método proyecto:
var $square : Objeto
var $message : Texto
$square:=cs.Square.new()
$message:=$square.description() //tengo 4 lados iguales