以下のコードを参照してください (C#):
Control button = new Button(100, 200, "Click Me!");
Control textBlock = new TextBlock(20, 20, "Hello World!");
List<Control> controls = new List<Control>();
controls.Add(button);
controls.Add(textBlock);
foreach (Control ctrl in controls)
{
ctrl.DrawMe(); //The objects will behave polymorphically, because they derive from
//a shared base class.
}
コントロールは、私が自分で作成した抽象クラスです。宣言内の Control を同等の派生クラス (以下に示すように) に変更すると、まったく同じ機能が得られます。何故ですか?派生クラスではなく抽象基本クラスに割り当てを行う場合に違いはありますか?
Button button = new Button(100, 200, "Click Me!");
TextBlock textBlock = new TextBlock(20, 20, "Hello World!");