C#语法总结—继承、多态

一、继承

1.基本继承关系

子类继承父类后,可以调用父类的成员。

    internal class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            student.Run();
        }
    }

    class Person
    {
        public void Run()
        {
            Console.WriteLine("Person can run.");
        }
    }

    class Student : Person
    {

    }

运行结果:
在这里插入图片描述

2. 隐藏父类的方法

子类隐藏父类的方法,如果调用子类实例,是调用子类的方法。为了代码规范,隐藏父类的方法,子类应该加上关键字new。

    internal class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            student.Run();

            // 子类隐藏了父类的方法,但是此处能调用父类对象的方法
            // 父类接收子类实例,是里式替换。 
            Person person = new Student();
            person.Run();

            Console.ReadKey();
        }
    }

    class Person
    {
        public void Run()
        {
            Console.WriteLine("Person can run.");
        }
    }

    class Student : Person
    {
    	// 子类隐藏父类的方法,最好加上关键字new,否则VS会提示
        public new void Run()
        {
            Console.WriteLine("Student can run.");
        }
    }

运行结果:
在这里插入图片描述

3. 重写父类的方法

子类重写父类的方法,父类方法标注virtual,子类方法标注override。此时,即使将子类实例赋值给父类对象,调用该方法,也是调用子类重写后的方法。如果要在子列重写的实例中调用父类的virtual方法,可以使用base.方法名();

internal class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            student.Run();

            Person person = new Student();
            person.Run();

            Console.ReadKey();
        }
    }

    class Person
    {
        // 如果要重写父类方法,父类方法必须标注virtual
        public virtual void Run()
        {
            Console.WriteLine("Person can run.");
        }
    }

    class Student : Person
    {
        // 子类重写父类中的虚方法
        public override  void Run()
        {
            Console.WriteLine("Student can run.");
        }
    }

运行结果:
在这里插入图片描述

4. 抽象方法

在父类中定义抽象方法,是为了让不同子类进行不同的实现,从而满足子类与子类间的不同具体行为。

        static void Main(string[] args)
        {
            Student student = new Student();
            student.Run();

            Person person = new Student();
            person.Run();

            Console.ReadKey();
        }
    }

    // 抽象类可以包含抽象方法,也可以包含具体方法
    abstract class Person
    {
        // 抽象方法必须写在抽象类中,没有具体实现,在子类中必须实现
        public abstract void Run();
    }

    class Student : Person
    {
        // 子类实现父类中的抽象方法
        public override  void Run()
        {
            Console.WriteLine("Student can run.");
        }
    }

运行结果:
在这里插入图片描述

5. 多态

使用接口interface实现多态,主要目的:实现解耦,从而实现不同的具体行为。

    internal class Program
    {
        static void Main(string[] args)
        {
            List<IUSB> lst = new List<IUSB>();
            lst.Add(new Fan());
            lst.Add(new Light());
            lst.Add(new UDisk());

            foreach(var item in lst)
            {
                item.Work();
            }

            Console.ReadKey();
        }
    }

    interface IUSB
    {
        // C# 8.0后接口方法才能用访问修饰符;
        // 接口中只能定义方法和属性;
        void Work(); 
    }

    class Fan : IUSB
    {
        public void Work()
        {
            Console.WriteLine("Fan is working.");
        }
    }

    class Light : IUSB
    {
        public void Work()
        {
            Console.WriteLine("Light is working.");
        }
    }

    class UDisk : IUSB
    {
        public void Work()
        {
            Console.WriteLine("UDisk is working.");
        }
    }

运行结果:
在这里插入图片描述

6. 重载

    // 重载,方法名相同,参数类型或数量不同,与返回值无关
    class Person
    {
        public void Run()
        {
            Console.WriteLine("Person can Run.");
        }

        public void Run(string name)
        {
            Console.WriteLine(name + "can Run.");
        }
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值