図形の面積を求めるコードから考えるポリモーフィズム

ポリモーフィズムのサンプルから理解を深めましょう

コード

using System;

public abstract class Shape
{
    public abstract double Area();
}

public class Circle : Shape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public override double Area()
    {
        return Math.PI * radius * radius;
    }
}

public class Rectangle : Shape
{
    private double width;
    private double height;

    public Rectangle(double width, double height)
    {
        this.width = width;
        this.height = height;
    }

    public override double Area()
    {
        return width * height;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Shape s1 = new Circle(5.0);
        Console.WriteLine("Area of Circle : " + s1.Area());

        Shape s2 = new Rectangle(5.0, 6.0);
        Console.WriteLine("Area of Rectangle : " + s2.Area());

        Console.ReadLine();
    }
}

解説

  • Shapeは抽象クラスで、面積を求めるArea()メソッドを抽象メソッドとして宣言しています。
  • CircleRectangleShapeを継承したクラスで、それぞれ円と四角形の面積を求めるためのArea()メソッドを実装しています。
  • Mainメソッドは、CircleRectangleのインスタンスを生成して、それぞれの面積を求めます。ここでは、親クラスの型であるShape型の変数に子クラスのインスタンスを代入していますが、ポリモーフィズムによって、正確な子クラスのメソッドが呼び出されます。

C#,学習,設計

Posted by hidepon