オーバーライド

確認済のバージョン: 4.1

-

難易度: 中級

子クラスのメンバーといっしょに基底クラスのメンバーをオーバーライドする方法を学びます。

オーバーライド

中級 Scripting

Fruit Class

Code snippet

using UnityEngine;
using System.Collections;

public class Fruit 
{
    public Fruit ()
    {
        Debug.Log("1st Fruit Constructor Called");
    }
    
         //このメソッドは仮想関数なので
         //子クラスでオーバーライドできます
    public virtual void Chop ()
    {
        Debug.Log("The fruit has been chopped.");     
    }
    
    public virtual void SayHello ()
    {
        Debug.Log("Hello, I am a fruit.");
    }
}
#pragma strict

public class Fruit 
{
    public function Fruit ()
    {
        Debug.Log("1st Fruit Constructor Called");
    }
    
    //Javascript ではメンバーのオーバーライドは自動的に発生します
    //そのため、キーワードを加える必要はありません
    public function Chop ()
    {
        Debug.Log("The fruit has been chopped.");     
    }
    
    public function SayHello ()
    {
        Debug.Log("Hello, I am a fruit.");
    }
}
import UnityEngine
import System.Collections


public class Fruit:

    public def constructor():
        Debug.Log('1st Fruit Constructor Called')

    
         //このメソッドは仮想関数なので
         //子クラスでオーバーライドできます
    public virtual def Chop():
        Debug.Log('The fruit has been chopped.')

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

Apple Class

Code snippet

using UnityEngine;
using System.Collections;

public class Apple : Fruit 
{
    public Apple ()
    {
        Debug.Log("1st Apple Constructor Called");
    }
    
        //これらのメソッドは親クラスをオーバーライドしています。
        //ですから、仮想メソッドをすべてオーバーライドできます。
    public override void Chop ()
    {
        base.Chop();
        Debug.Log("The apple has been chopped.");     
    }
    
    public override void SayHello ()
    {
        base.SayHello();
        Debug.Log("Hello, I am an apple.");
    }
}
#pragma strict

public class Apple extends Fruit 
{
    public function Apple ()
    {
        Debug.Log("1st Apple Constructor Called");
    }
    
    //Javascript ではメンバーのオーバーライドは自動的に発生します
    //そのため、キーワードを加える必要はありません
    public function Chop ()
    {
        super.Chop();
        Debug.Log("The apple has been chopped.");     
    }
    
    public function SayHello ()
    {
        super.SayHello();
        Debug.Log("Hello, I am an apple.");
    }
}
import UnityEngine
import System.Collections


public class Apple(Fruit):

    public def constructor():
        Debug.Log('1st Apple Constructor Called')

    
         //これらのメソッドは親クラスをオーバーライドしています。
         //ですから、仮想メソッドをすべてオーバーライドできます。
    public override def Chop():
        super.Chop()
        Debug.Log('The apple has been chopped.')

    
    public override def SayHello():
        super.SayHello()
        Debug.Log('Hello, I am an apple.')

FruitSalad Class

Code snippet

using UnityEngine;
using System.Collections;

public class FruitSalad : MonoBehaviour 
{   
    void Start () 
    {
        Apple myApple = new Apple();
        
                //Apple クラスバージョンのメソッドは Fruit クラスの
                //バージョンをオーバーライドしています。また、Apple バージョンでは
                // "base" キーワードを使って Fruit バージョンを呼び出しているので、
                //両バージョンが呼び出されることに注目してください。
        myApple.SayHello();
        myApple.Chop(); 
        
                // オーバーライドはポリモーフィズムの状況でも有用です。
                //Fruit クラスのメソッドは "virtual" (仮想) で
                //Apple クラスのメソッドは "override" (オーバーライド) なので、
                //Apple を Fruit にアップキャストすると
                //Apple のバージョンのメソッドが使用されます。
        Fruit myFruit = new Apple();
        myFruit.SayHello();
        myFruit.Chop();
    }
}
#pragma strict

function Start () 
{
    var myApple = new Apple();
    
        //Apple クラスバージョンのメソッドは Fruit クラスの
        //バージョンをオーバーライドしています。また、Apple バージョンでは
        // "base" キーワードを使って Fruit バージョンを呼び出しているので、
        //両バージョンが呼び出されることに注目してください。
    myApple.SayHello();
    myApple.Chop(); 
    
         // オーバーライドはポリモーフィズムの状況でも有用です。
         //Fruit クラスのメソッドは "virtual" (仮想) で
         //Apple クラスのメソッドは "override" (オーバーライド) なので、
         //Apple を Fruit にアップキャストすると
         //Apple のバージョンのメソッドが使用されます。
    var myFruit = new Apple();
    myFruit.SayHello();
    myFruit.Chop();
}
import UnityEngine
import System.Collections


public class FruitSalad(MonoBehaviour):

    private def Start():
        myApple = Apple()
        
                //Apple クラスバージョンのメソッドは Fruit クラスの
                //バージョンをオーバーライドしています。また、Apple バージョンでは
                // "base" キーワードを使って Fruit バージョンを呼び出しているので、
                //両バージョンが呼び出されることに注目してください。
        myApple.SayHello()
        myApple.Chop()
        
                // オーバーライドはポリモーフィズムの状況でも有用です。
                //Fruit クラスのメソッドは "virtual" (仮想) で
                //Apple クラスのメソッドは "override" (オーバーライド) なので、
                //Apple を Fruit にアップキャストすると
                //Apple のバージョンのメソッドが使用されます。
        myFruit as Fruit = Apple()
        myFruit.SayHello()
        myFruit.Chop()

関連するチュートリアル