实现多态的三种方式

更新时间:2023-07-23 03:23:22 阅读: 评论:0

            实现多态的三种方式
多态:父类的对象用子类new,实现子类的方法。
一、接口
接口不能有实例成员;接口可以被多继承
接口不能包含构造函数。
namespace jiekou
爱的魔法歌曲{
    public interface  ba1
    {
        void  Func();//没有public
    }
    public class child1 : ba1
    {
      public  void Func()
        {
          Console.WriteLine("child1.func");
        }
    }
    public class child2:ba1
    {
        public void Func()
        {
            Console.WriteLine("child2.func");
        }
    }
    public class child3 : ba1
    {
      public void Func()
        {
            Console网络歌曲大全流行歌曲.WriteLine("child3.func");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
          ba1 b = new ba1();
双木不成林            ba1 b1 = new child1();
            ba1 b2 = new child2();
            b1.Func();
            Console.Read();
        }
    }
}
二、重写(Virtual/)
virtual方法为孩子提供了选择,如果孩子选择override,那么它可以实现多态;如果选择new或者不写,那么就用老爸的函数。
namespace chongxie
{
    public class ba2
    {
      public  ba2()
    {
        Console.WriteLine("基类构造函数");
    }
      public virtual void  Func()
        {
            Console.WriteLine("ba2.func");
        }
    }
    public  class  child1:ba2
    {
        public override void Func()
        {
            Console.WriteLine("child1.func");
        }
    }
    public class child2 : ba2
    {
        public override void Func()
        {
            Console.WriteLine("child2.func");
        }
    }
    public class child3 : ba2
    {
        public new void Func()
        {
            Console.WriteLine("child3.func");
        }
    }
    public class child4 : ba2
    {
        public  void Func()
        {
            Console.WriteLine("child4.func");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ba2 b = new ba2();
            ba2 b1= new  child1();
            ba2 b2 = new child2();
            ba2 b3 = new child3();t8钢
少见多怪            ba2 b4 = new child4();
            Console.WriteLine("------------");
            b.Func();
            b1.Func();
            b2.Func();
            b3.Func();
            b4.Func();
            Console.Read();
        }
    }
}
三、抽象(abstract)
包含抽象方法的类一定得是抽象类,但抽象类中可以包含实例成员,这些实例成员也将遗传给儿子
抽象类不可以被实例化,但可以有构造函数,它的构造函数会在子类实例化的时候调用
namespace chouxiang
{
public abstract class ba3
    {
      public  ba3()
        {
            Console.WriteLine("基类构造函数");
       
        public abstract void Func();
        public void method()
        {
            Console.WriteLine( "基类方法");
        }
    }
    public  class child1:ba3
    {
        public override void  Func()
        {
            Console.WriteLine("child1.func");
        }
    }
    public class child2 : ba3
    {
        public override void Func()
        {
            Console.WriteLine("child2.func");
        }
    }
    public class child3 : ba3
    {
        public  override void  Func()
        {
            Console.WriteLine("child3.func");
        }
无缘无故的反义词    }
    class Program
普利斯特里
    {
        static void Main(string[] args)
戒指的戴法和意义
        {
            ba3 b1 = new child1();
            ba3 b2 = new child2();
            ba3 b3 = new child3();
            Console.WriteLine("--------");
            b1.Func();
            b2.Func();
            b3.Func();
            Console.WriteLine("--------");
            b1.method();
            b2.method();
            b3.method();
            Console.Read();
        }
    }
}

本文发布于:2023-07-23 03:23:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1092815.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实例   成员   子类
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图