Unity 3D Game Engine – JavaScript – Inheritance (Ereditarietà)
L’ereditarietà fra le classi serve per creare una relazione forte tra classi con rapporto padre-figlio.
La classe figlio potrà accedere a tutti i costruttori della classe padre.
Le classi potranno essere:
– padre public -> il figlio e anche tutte le altre classi non imparentate potranno accedere ai costruttori di funzione del padre
– padre private -> i costruttori nel padre postranno esistere ma il figlio non vi potrà accedere
– padre protected -> solo il figlio potrà accedere ai costruttori del padre
Un esempio tratto dal mondo dei videogiochi potrebbe essere:
Humanoid class
– Player class
– Enemies class
— Orc class
— Goblins class
Fruit Class
#pragma strict
public class Fruit (Frutta)
{
public var color: String;
//This is the first constructor for the Fruit class
//and is not inherited by any derived classes.
public function Fruit()
{
color = "orange";
Debug.Log("1st Fruit Constructor Called");
}
//This is the second constructor for the Fruit class
//and is not inherited by any derived classes.
public function Fruit(newColor : String)
{
color = newColor;
Debug.Log("2nd Fruit Constructor Called");
}
public function Chop()
{
Debug.Log("The " + color + " fruit has been chopped.");
}
public function SayHello()
{
Debug.Log("Hello, I am a fruit.");
}
}
Apple Class (Mele)
#pragma strict
//This is the derived class whis is
//also know as the Child class.
public class Apple extends Fruit
{
//This is the first constructor for the Apple class.
//It calls the parent constructor immediately, even
//before it runs.
public function Apple()
{
//Notice how Apple has access to the public variable
//color, which is a part of the parent Fruit class.
color = "red";
Debug.Log("1st Apple Constructor Called");
}
//This is the second constructor for the Apple class.
//It specifies which parent constructor will be called
//using the "base" keyword.
public function Apple(newColor : String)
{
super(newColor);
//Notice how this constructor doesn't set the color
//since the base constructor sets the color that
//is passed as an argument.
Debug.Log("2nd Apple Constructor Called");
}
}
FruitSalad Class (Insalata di frutta)
#pragma strict
function Start ()
{
//Let's illustrate inheritance with the
//default constructors.
Debug.Log("Creating the fruit");
var myFruit = new Fruit();
Debug.Log("Creating the apple");
var myApple = new Apple();
//Call the methods of the Fruit class.
myFruit.SayHello();
myFruit.Chop();
//Call the methods of the Apple class.
//Notice how class Apple has access to all
//of the public methods of class Fruit.
myApple.SayHello();
myApple.Chop();
//Now let's illustrate inheritance with the
//constructors that read in a string.
Debug.Log("Creating the fruit");
myFruit = new Fruit("yellow");
Debug.Log("Creating the apple");
myApple = new Apple("green");
//Call the methods of the Fruit class.
myFruit.SayHello();
myFruit.Chop();
//Call the methods of the Apple class.
//Notice how class Apple has access to all
//of the public methods of class Fruit.
myApple.SayHello();
myApple.Chop();
}
Come funziona?
1. Fruit Class
– creo una classe pubblica perchè devo poter accedere ai dati da altre classi esterne
– creo una funzione pubblica Fruit() con all’interno la variabile ‘color’
2. Apple Class
– creo la classe pubblica Apple() figlia di Fruit()
... Apple extends Fruit ...
– accede alla variabile pubblica ‘color’ della classe Fruit() e gli assegna il valore ‘red’
– ‘red’ viene inviato come una stringa a ‘newColor’ di public function Fruit(newColor : String)
3. FruitSalad Class (macedonia)
Per fare la macedonia dobbiamo mischiare il frutto ‘orange’ di Fruit() e quello ‘red’ di Apple().
– nella funzione Start() che viene eseguita all’avvio del programma richiamo:
– la classe Fruit(). funzione SayHello()
-> “Hello, I am a fruit.”
– la classe Fruit(). funzione Chop()
-> “The ” + orange + ” fruit has been chopped.”
– la classe Apple(). funzione SayHello() della classe padre
-> “Hello, I am a fruit.”
– la classe Apple(). funzione Chop() della classe padre
-> “The” + yellow + ” fruit has been chopped.”
Un’altro sistema consiste nell’inviare dellew stringhe alle classiu padre-figlio come segue:
//Now let's illustrate inheritance with the
//constructors that read in a string.
Debug.Log("Creating the fruit");
myFruit = new Fruit("yellow");
Debug.Log("Creating the apple");
myApple = new Apple("green");
//Call the methods of the Fruit class.
myFruit.SayHello();
myFruit.Chop();