Inheritance

Checked with version: 4.1

-

Difficulty: Intermediate

How to use inheritance to reuse code and build a strong relationship between related classes.

Inheritance

Intermediate Scripting

Fruit Class

Code snippet

using UnityEngine;
using System.Collections;

//This is the base class which is
//also known as the Parent class.
public class Fruit 
{
    public string color;
    
    //This is the first constructor for the Fruit class
    //and is not inherited by any derived classes.
    public 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 Fruit(string newColor)
    {
        color = newColor;
        Debug.Log("2nd Fruit Constructor Called");
    }
    
    public void Chop()
    {
        Debug.Log("The " + color + " fruit has been chopped.");     
    }
    
    public void SayHello()
    {
        Debug.Log("Hello, I am a fruit.");
    }
}
#pragma strict

public class Fruit
{
    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.");
    }
}
import UnityEngine
import System.Collections


//This is the base class which is
//also known as the Parent class.
public class Fruit:

    
    public color as string

    
    //This is the first constructor for the Fruit class
    //and is not inherited by any derived classes.
    public def constructor():
        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 def constructor(newColor as string):
        color = newColor
        Debug.Log('2nd Fruit Constructor Called')

    
    public def Chop():
        Debug.Log((('The ' + color) + ' fruit has been chopped.'))

    
    public def SayHello():
        Debug.Log('Hello, I am a fruit.')

Apple Class

Code snippet

using UnityEngine;
using System.Collections;

//This is the derived class whis is
//also know as the Child class.
public class Apple : Fruit 
{
    //This is the first constructor for the Apple class.
    //It calls the parent constructor immediately, even
    //before it runs.
    public 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 Apple(string newColor) : base(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");
    }
}
#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");
    }
    
}
import UnityEngine
import System.Collections


//This is the derived class whis is
//also know as the Child class.
public class Apple(Fruit):

    
    //This is the first constructor for the Apple class.
    //It calls the parent constructor immediately, even
    //before it runs.
    public def constructor():
        //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 def constructor(newColor as 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

Code snippet

using UnityEngine;
using System.Collections;

public class FruitSalad : MonoBehaviour 
{
    void Start () 
    {
        //Let's illustrate inheritance with the 
        //default constructors.
        Debug.Log("Creating the fruit");
        Fruit myFruit = new Fruit();
        Debug.Log("Creating the apple");
        Apple 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();
    }
}
#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();
}
import UnityEngine
import System.Collections


public class FruitSalad(MonoBehaviour):

    
    private def Start():
        
        //Let's illustrate inheritance with the 
        //default constructors.
        Debug.Log('Creating the fruit')
        myFruit = Fruit()
        Debug.Log('Creating the apple')
        myApple = 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 = Fruit('yellow')
        Debug.Log('Creating the apple')
        myApple = 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()

Related tutorials

Scripting

  1. Scripts as Behaviour Components
  2. Variables and Functions
  3. Conventions and Syntax
  4. C# vs JS syntax
  5. IF Statements
  6. Loops
  7. Scope and Access Modifiers
  8. Awake and Start
  9. Update and FixedUpdate
  10. Vector Maths
  11. Enabling and Disabling Components
  12. Activating GameObjects
  13. Translate and Rotate
  14. Look At
  15. Linear Interpolation
  16. Destroy
  17. GetButton and GetKey
  18. GetAxis
  19. OnMouseDown
  20. GetComponent
  21. Delta Time
  22. Data Types
  23. Classes
  24. Instantiate
  25. Arrays
  26. Invoke
  27. Enumerations
  28. Switch Statements
  1. Properties
  2. Ternary Operator
  3. Statics
  4. Method Overloading
  5. Generics
  6. Inheritance
  7. Polymorphism
  8. Member Hiding
  9. Overriding
  10. Interfaces
  11. Extension Methods
  12. Namespaces
  13. Lists and Dictionaries
  14. Coroutines
  15. Quaternions
  16. Delegates
  17. Attributes
  18. Events
  1. Building a Custom Inspector
  2. The DrawDefaultInspector Function
  3. Adding Buttons to a Custom Inspector
  4. Creating Basic Editor Tools
  1. MonoDevelop's Debugger
  2. Good Coding Practices in Unity
  3. Unity Editor Extensions – Menu Items
  4. Creating Meshes
  1. AssetBundles and the AssetBundle Manager
  2. Mastering Unity Project Folder Structure - Version Control Systems
  1. Installing Tools for Unity Development
  2. Building your first Unity Game with Visual Studio
  3. Editing Unity games in Visual Studio
  4. Debugging Unity games in Visual Studio
  5. Graphics debugging Unity games in Visual Studio
  6. Taking Unity games to Universal Windows Platform
  7. Testing Unity games on Android in Visual Studio
  1. Scripting Primer and Q&A
  2. Scripting Primer and Q&A - Continued
  3. Scripting Primer and Q&A - Continued (Again)
  4. Persistence - Saving and Loading Data
  5. Object Pooling
  6. Introduction to Scriptable Objects
  7. How to communicate between Scripts and GameObjects
  8. Coding in Unity for the Absolute Beginner
  9. Sound Effects & Scripting
  10. Editor Scripting Intro
  11. Writing Plugins
  12. Property Drawers & Custom Inspectors
  13. Events: Creating a simple messaging system
  14. Using Interfaces to Make a State Machine for AI
  15. Ability System with Scriptable Objects
  16. Character Select System with Scriptable Objects
  1. Intro and Setup
  2. Data Classes
  3. Menu Screen
  4. Game UI
  5. Answer Button
  6. Displaying Questions
  7. Click To Answer
  8. Ending The Game and Q&A
  1. Intro To Part Two
  2. High Score with PlayerPrefs
  3. Serialization and Game Data
  4. Loading Game Data via JSON
  5. Loading and Saving via Editor Script
  6. Game Data Editor GUI
  7. Question and Answer
  1. Overview and Goals
  2. Localization Data
  3. Dictionary, JSON and Streaming Assets
  4. Localization Manager
  5. Startup Manager
  6. Localized Text Component
  7. Localized Text Editor Script
  8. Localization Q&A