手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

1.4多态

时间:2021/4/7 5:29:35|来源:|点击: 次

静态多态 运行前就可以判断调用的是哪种方法,按F12可跳转至调用方法
运行时多态 运行前无法确认调用了那种方法,只有在运行时才能确定

public class Polygon
{
    public int Length;
    public int Width;
    public string name;

    public float Area;

    public void ShowBaseInfo()
    {
        Debug.Log(name + "的长为" + Length + ",宽为" + Width + ",是" + color + "色的");
    }

    public virtual void CalaArea()//virtual 代表虚函数,意味着子类可以覆盖其实现
    {
        Area = Length * Width;
    }

    public virtual void Show()
    {
        Debug.Log("Polygon Show");
    }
}

 //派生类(子类)
class Rectangle : Polygon
{
    public Rectangle()
    {

    }

    ~Rectangle()
    {

    }

    public override void CalaArea()
    {
        Area = Length * Width;
    }

    public override void Show()
    {
        Debug.Log("Rectangle Show");
    }
}

class Triangle : Polygon
{
    public Triangle()
    {

    }

    ~Triangle()
    {

    }
    public override void CalaArea()//override 代表覆盖
    {
        Area = Length * Width * 1/2;
    }

    public override void Show()
    {
        Debug.Log("Triangle Show");
    }
}

public class Inherit : MonoBehaviour
{
    void Start()
    {
        Rectangle rectangle = new Rectangle();
        rectangle.Length = 2;
        rectangle.Width = 3;
        rectangle.name = "矩形";
        //静态多态 运行前就可以判断调用的是哪种方法,按F12可跳转至调用方法
        rectangle.CalaArea();
        Debug.Log(rectangle.name + "的面积是" + rectangle.Area);

        Triangle triangle = new Triangle();

        //运行时多态 运行前无法确认调用了那种方法,只有在运行时才能确定
        //          父       =     子 
        Polygon basePartent1 = rectangle;
        Polygon basePartent2 = triangle;

        basePartent1.Show();
        basePartent2.Show();
    }

}

Copyright © 2002-2019 某某自媒体运营 版权所有