重载、重写---C#

首先,知道什么是方法?

  • 方法是由 方法签名 和一系列语句的代码块 组成。
  • 方法签名包括方法的访问级别(如:public 或private)、可修饰符(如:static 或者abstract或者virtual。。)、方法名称参数
  • 方法分类
    1).静态方法:
    被static关键字修饰的方法,成为静态方法,此时的静态方法属于类级别,不能通过类的实例进行访问,只能通过方法所在的类名字点出来这个静态方法名字。

    下面的代码演示静态方法的定义和调用:
    这里写图片描述

    2).实例方法:
    相反,实例方法就是方法前面不加关键字static,直接通过new运算符,实例化一个对象后,通过创建的对象来点出来,实例方法;而且,它是不能通过类名字点出来实例方法的。
    下面的代码演示实例方法的定义和调用:
    这里写图片描述

重载

  • 指的是方法的方法名相同,但是参数列表(参数的类型,参数的个数,参数顺序)不一样,这些方法互称为方法的重载
  • 重载是平行的。是一个类的内部的方法名称一样参数列表不一样的多个方法,以实现不同的需求(相同的功能)。

    下面的代码演示方法重载得到的一些方法:
    这里写图片描述

    是重载的如下:
    这里写图片描述

重写

  • 重写是垂直的。是子类(派生类)对父类(基类)同名方法的重新实现。
  • 由于父类的方法不能够完成某种功能,但是还必须得调用这个方法,则子类可以重写父类中的这个方法,加强其功能。
  • 在父类里面,如果一个方法可以让子类重写,必须在方法的返回类型前面用virtual、abstract、voerride(继承了父类的虚方法)关键字来修饰。说明这个方法可以被子类重写。

    下面的代码演示方法重写得到的一些方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _001基础
{
    class Program
    {

        static void Main(string[] args)
        {
            Animal horse = new Horse();
            horse.Voice();
            Animal sheep = new Sheep();
            //相同类型的对象调用相同的方法表现出不同的行为
            sheep.Voice();
            Console.ReadKey();
        }
    }
    //动物父类
    public class Animal
    {
        //几乎所有的动物都具有发出声音的能力
        //但是对于动物的子类来说,每个子类发出的声音都是不一样的
        public virtual void Voice()
        {
            Console.WriteLine("动物开始发出声音了");
        }
    }

    //马(子类),子类应该重写父类中的方法,以实现自己特有的行为
    public class Horse : Animal
    { 
        //通过override关键字来重写父类中方法
        public override void Voice()
        {
            //调用父类中的方法
            base.Voice();
            Console.WriteLine("马发出嘶嘶。。。。嘶嘶。。。的声音");
        }
    }

    //羊(子类)
    public class Sheep : Animal
    {
        public override void Voice()
        {
            base.Voice();
            Console.WriteLine("羊发出咩。。。咩。。。。的声音");
        }
    }
}

结果:
这里写图片描述

阻止派生类重写虚成员—-

怎么停止对马类中的voice方法继续重写?使用sealed关键字,停止继续重新父类中方法

 public class Horse : Animal
    { 
        //通过override关键字来重写父类中方法
        public sealed override void Voice()
        {
            //调用父类中的方法
            base.Voice();
            Console.WriteLine("马发出嘶嘶。。。。嘶嘶。。。的声音");
        }
    }
此时如果再有类继承这个“马”类,就不能继承该vocice方法了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静心物语313

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值