Personとそれを継承したTaro作る
public class Person { public string name; // 名前. public int age; // 年齢. public virtual void Say() { Debug.Log("person"); } } public class Taro : Person { public override void Say() { Debug.Log("I am taro"); } }
実行させてみる。
void Start () { Person p1 = new Person(); p1.name = "YAMADA ICHIRO"; p1.age = 11; p1.Say(); // => person ・・・【A】 Person p2 = new Taro(); p2.name = "Tanaka Taro"; p2.age = 19; p2.Say(); // => I am taro ・・・【B】 ((Person)p2).Say(); // => I am taro ・・・【D】 Person[] persons = new Person[]{ p1, p2, }; foreach(var person in persons) { person.Say (); } => person、次はI am taro【D】 }
Aはわかる。
newした時の型を見ているのだろうか? Bは親ではなく継承した子クラスのメソッド。
キャストしたら親クラスのメソッドになると思ったがCは・・またもや子のメソッド。
Dは一旦配列に入れたが、それでもnewした時のメソッドになっている。