【C#】用父类抽象类和接口实现多态之实践篇

目录

一、虚方法和重写方法:

运行效果

二、抽象方法抽象类

什么时候用抽象方法?

三、接口

3.1实例化内容

3.2另一种方法实例化调用接口


一、虚方法和重写方法:

namespace _15.多态
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.Show();

            Teacher t = new Teacher();
            t.Name = "卡卡西";
            t.Age = 30;
            t.Gender = '男';
            t.Show();

            Console.ReadKey();

        }
        public class Person
        {
            //public Person(string name, char gender, int age)  //构造函数
            //{
            //    this._name = name;
            //    this._gender = gender;
            //    this._age = age;
            //}
            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            private char _gender;
            public char Gender
            {
                get { return _gender; }
                set { _gender = value; }
            }
            private int _age;
            public int Age
            {
                get { return _age; }
                set { _age = value; }
            }
            public virtual void Show()      //虚方法关键字---virtual
            {
                Console.WriteLine("我是援军别害怕");
            }
       
        }

        public class Teacher : Person       //继承父类person
        {
            
            public override void Show()     //overrider的作用是重写父类的方法,为了避免瑕疵不报绿线对应父类中的virtual
            {
                Console.WriteLine( "我是{0},今年{1}岁,是{2}老师",this.Name ,this.Age ,this.Gender);
            }
        }   
    }
}

运行效果

 

二、抽象方法抽象类

namespace _16.多态_抽象方法
{
    class Program
    {
        static void Main(string[] args)
        {
            Pig pig = new Pig();
            pig.Shout();
            Console.ReadKey();
        }
        public abstract class Animal      //这里也要添加abstract
        {
            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            private char _gender;
            public char Gender
            {
                get { return _gender; }
                set { _gender = value; }
            }
            private int _age;
            public int Age
            {
                get { return _age; }
                set { _age = value; }
            }

            public abstract void Shout();       //抽象方法,没有方法体

     
        }
        public class Pig : Animal
        {
            public override void Shout()        //要继承上边的抽象类,里边的抽象方法必须要override重写
            {
                Console.WriteLine("哼哼叫");
            }
        }
    }
}

什么时候用抽象方法?

方法里边没有抽象体,不需要对其他事物进行描述,但是其他类都有这个行为,这个时候采用抽象方法。

抽象方法无法实例化,抽象类只能用作基类

三、接口

新创建类,在类中写入定义接口

interface IFly
    {
        void IFly();
    }
namespace _18.多态_接口
{
    class Program
    {
        static void Main(string[] args)
        {
            //Teacher t = new Teacher();
            //t.IFly();
            //Console.ReadKey();

            IFly ifly = new Student();//多态的体验形式
            ifly.IFly();
            Console.ReadKey();
        }
    }
    public class Person
    {

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private char _gender;
        public char Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }
        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }   
    }


    public class Teacher : Person, IFly
    {
        public void Say()
        {
            Console.WriteLine("hellow,我是老师");
        }

        public void IFly()
        {
            Console.WriteLine("我会飞");
        }
    }

    public class Student : IFly
    {
        public void SayHello()
        {
            Console.WriteLine("我是学生");
        }

        public void IFly()
        {
            Console.WriteLine("我也会飞");
        }
    }
}

3.1实例化内容

3.2另一种方法实例化调用接口

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值