継承

確認済のバージョン: 4.1

-

難易度: 中級

コードを再利用し、関連クラスの関係をより密接にする継承の使い方を学びます。

継承

中級 Scripting

Fruit Class

Code snippet

using UnityEngine;
using System.Collections;

//これが基底クラス
//親クラスとも呼ばれます
public class Fruit 
{
    public string color;
    
    //これが Fruit クラスの 1 つめのコンストラクター
    //これを継承する派生クラスはありません
    public Fruit()
    {
        color = "orange";
        Debug.Log("1st Fruit Constructor Called");
    }
    
    //これが Fruit クラスの 2 つめのコンストラクター
    //これを継承する派生クラスはありません
    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;
    
    //これが Fruit クラスの 1 つめのコンストラクター
    //これを継承する派生クラスはありません
    public function Fruit()
    {
        color = "orange";
        Debug.Log("1st Fruit Constructor Called");
    }
    
    //これが Fruit クラスの 2 つめのコンストラクター
    //これを継承する派生クラスはありません
    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


//これが基底クラス
//親クラスとも呼ばれます
public class Fruit:

    
    public color as string

    
    //これが Fruit クラスの 1 つめのコンストラクター
    //これを継承する派生クラスはありません
    public def constructor():
        color = 'orange'
        Debug.Log('1st Fruit Constructor Called')

    
    //これが Fruit クラスの 2 つめのコンストラクター
    //これを継承する派生クラスはありません
    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;

//これは派生クラス
//子クラスとも呼ばれます
public class Apple : Fruit 
{
    //これが Apple クラスの 1 つめのコンストラクター
    //実行前であっても、親のコンストラクターを即座に呼び出します
    public Apple()
    {
        //Apple が親の Fruit クラスの一部であるパブリック変数 color に
        //アクセスすることに注目してください。
        color = "red";
        Debug.Log("1st Apple Constructor Called");
    }
    
    // これが Apple クラスの 2 つめのコンストラクター
    // "base" キーワードを使ってどの親コンストラクターを
    // 呼び出すか特定します
    public Apple(string newColor) : base(newColor)
    {
                //color に直接、値を設定しないことに注目してください。
                //なぜなら、継承する基底コンストラクターは引数として
                //渡された値を color に設定するからです。
        Debug.Log("2nd Apple Constructor Called");
    }
}
#pragma strict

//これは派生クラス
//子クラスとも呼ばれます
public class Apple extends Fruit 
{
    
    //これが Apple クラスの 1 つめのコンストラクター
    //実行前であっても、親のコンストラクターを即座に呼び出します
    public function Apple()
    {
        //Apple が親の Fruit クラスの一部であるパブリック変数 color に
        //アクセスすることに注目してください。
        color = "red";
        Debug.Log("1st Apple Constructor Called");
    }
    
    // これが Apple クラスの 2 つめのコンストラクター
    // "base" キーワードを使ってどの親コンストラクターを
    // 呼び出すか特定します
    public function Apple(newColor : String)
    {
        super(newColor);
                //color に直接、値を設定しないことに注目してください。
                //なぜなら、継承する基底コンストラクターは引数として
                //渡された値を color に設定するからです。
        Debug.Log("2nd Apple Constructor Called");
    }
    
}
import UnityEngine
import System.Collections


//これは派生クラス
//子クラスとも呼ばれます
public class Apple(Fruit):

    
    //これが Apple クラスの 1 つめのコンストラクター
    //実行前であっても、親のコンストラクターを即座に呼び出します
    public def constructor():
        //Apple が親の Fruit クラスの一部であるパブリック変数 color に
        //どのようにアクセスするかに注目してください。
        color = 'red'
        Debug.Log('1st Apple Constructor Called')

    
    // これが Apple クラスの 2 つめのコンストラクター
    // "base" キーワードを使ってどの親コンストラクターを
    // 呼び出すか特定します
    public def constructor(newColor as string):
        super(newColor)
                //color に直接、値を設定しないことに注目してください。
                //なぜなら、継承する基底コンストラクターは引数として
                //渡された値を color に設定するからです。
        Debug.Log('2nd Apple Constructor Called')

FruitSalad Class

Code snippet

using UnityEngine;
using System.Collections;

public class FruitSalad : MonoBehaviour 
{
    void Start () 
    {
        // デフォルトのコンストラクターで
        // 継承を確認してみましょう
        Debug.Log("Creating the fruit");
        Fruit myFruit = new Fruit();
        Debug.Log("Creating the apple");
        Apple myApple = new Apple();
        
        // Fruit クラスのメソッドを呼び出します
        myFruit.SayHello();
        myFruit.Chop();
        
        // Apple クラスのメソッドを呼び出します。
        // Apple クラスは Fruit クラスのすべての
        //  public メソッドにアクセスできます。
        myApple.SayHello();
        myApple.Chop();
        
        // こんどは、文字列を読み込むコンストラクターの
        // 継承を確認しましょう
        Debug.Log("Creating the fruit");
        myFruit = new Fruit("yellow");
        Debug.Log("Creating the apple");
        myApple = new Apple("green");
        
        // Fruit クラスのメソッドを呼び出します
        myFruit.SayHello();
        myFruit.Chop();
        
        //Apple クラスのメソッドを呼び出します。
        //Apple クラスは Fruit クラスの public メソッドの
        //すべてにアクセスできます。
        myApple.SayHello();
        myApple.Chop();
    }
}
#pragma strict
    
function Start () 
{   
    // デフォルトのコンストラクターで
    // 継承を確認してみましょう
    Debug.Log("Creating the fruit");
    var myFruit = new Fruit();
    Debug.Log("Creating the apple");
    var myApple = new Apple();
        
    // Fruit クラスのメソッドを呼び出します
    myFruit.SayHello();
    myFruit.Chop();
        
    //Apple クラスのメソッドを呼び出します。
    //Apple クラスは Fruit クラスのすべての
    //public メソッドにアクセスできます。
    myApple.SayHello();
    myApple.Chop();
        
    // こんどは、文字列を読み込むコンストラクターの
    // 継承を確認しましょう
    Debug.Log("Creating the fruit");
    myFruit = new Fruit("yellow");
    Debug.Log("Creating the apple");
    myApple = new Apple("green");
        
    // Fruit クラスのメソッドを呼び出します
    myFruit.SayHello();
    myFruit.Chop();
        
        //Apple クラスのメソッドを呼び出します。
        //Apple クラスは Fruit クラスの public メソッドの
        //すべてにアクセスできます。
    myApple.SayHello();
    myApple.Chop();
}
import UnityEngine
import System.Collections


public class FruitSalad(MonoBehaviour):

    
    private def Start():
        
        // デフォルトのコンストラクターで
        // 継承を確認してみましょう
        Debug.Log('Creating the fruit')
        myFruit = Fruit()
        Debug.Log('Creating the apple')
        myApple = Apple()
        
        // Fruit クラスのメソッドを呼び出します
        myFruit.SayHello()
        myFruit.Chop()
        
                // Apple クラスのメソッドを呼び出します。
                // Apple クラスは Fruit クラスの public メソッドの
                // すべてにアクセスできます。
        myApple.SayHello()
        myApple.Chop()
        
               // こんどは、文字列を読み込むコンストラクターの
               // 継承を確認しましょう
        Debug.Log('Creating the fruit')
        myFruit = Fruit('yellow')
        Debug.Log('Creating the apple')
        myApple = Apple('green')
        
        // Fruit クラスのメソッドを呼び出します
        myFruit.SayHello()
        myFruit.Chop()
        
                //Apple クラスのメソッドを呼び出します。
                //Apple クラスは Fruit クラスの public メソッドの
                //すべてにアクセスできます。
        myApple.SayHello()
        myApple.Chop()

関連するチュートリアル