多态总结复习

虚方法

调用父类的方法时,会调用被子类重写过的方法

        static void Main(string[] args)
        {
            //让一个对象能够表现出多种的状态(类型)
            Cow_cat cat1 = new Cow_cat("zeze");
            Orrange_cat cat2 = new Orrange_cat("huahua");
            Cat[] mycat = { cat1, cat2 };//子类可以赋值给父类
            for (int i = 0; i < mycat.Length; i++)
            {
                mycat[i].display();//调用的是父类的方法
            }
            Console.ReadKey();


        }
        public class Cat
        {
            string _name;//字段
            public string Name //属性
            {
                get { return _name; }
                set { _name = value; }
            }
            public Cat(string name)//构造函数
            {
                this.Name = name;
            }
            public virtual void display() //方法
            {
                Console.WriteLine("{0} is a cute cat.", this.Name);
            }

        }

        public class Cow_cat : Cat
        {
            public Cow_cat(string name) : base(name)
            {

            }
            public override void display()
            {
                Console.WriteLine("{0} is a cute but naughty cat.", this.Name);
            }
        }

        public class Orrange_cat : Cat
        {
            public Orrange_cat(string name):base(name)
            {

            }
            public override void display()
            {
                Console.WriteLine("{0} is a cute but edacity cat.", this.Name);
            }
        }

抽象类

当父类中的方法不知道如何实现时,可以将方法写为抽象方法,抽象方法没有方法体,抽象类和接口都不允许创建对象

        static void Main(string[] args)
        {
            Cat cat1 = new Cow_cat();//抽象类不允许创建对象,但是可以创建子类对象给父类抽象类
            cat1.display();//调用的是父类函数,但被子类重写,因此为调用子类重写的方法
            Console.ReadKey();
        }
        public abstract class Cat
        {
            public abstract void display();
        }
        public class Cow_cat
            : Cat
        {
            public override void display()
            {
                Console.WriteLine("Cow cat is a cute but naughty cat.");
            }
        }

接口

接口提供派生类应遵循的标准结构
接口与接口之间可以继承,且可以多继承
接口不能继承类,类可以继承接口
实现接口的子类必须实现该接口的全部成员

        public class Cat
        {

            public void display() //方法
            {
                Console.WriteLine("Cat is cute.");
            }

        }
        public interface color
        {
            void catcolor();
        }
        public class Cow_cat : Cat, color//可以继承类和接口
        {

            public void catcolor()
            {
                Console.WriteLine("Cow cat is black and white.");
            }
        }
                public class Orrange_cat : Cat, color
        {
        public class Orrange_cat : Cat, color
        {

            public void catcolor()
            {
                Console.WriteLine("Orrange cat is orrange.");
            }
        }

抽象类与接口异同

相同点:

  • 都可以被继承
  • 都不能直接被实例化
  • 都可以包含方法且都没有实现
  • 派生类必须实现未实现的成员

不同点:

  • 接口可以多重实现,抽象类只能被单一继承
  • 抽象类可以定义字段,接口不能

抽象类与接口的用法

  • 抽象类表示共性,而接口表示规范
  • 抽象类主要用于关系密切的对象,接口适合为不相关的类提供通用功能
  • 接口的定义应该具有专一的功能性,而不是多功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值